gpt4 book ai didi

apache-spark - 如何在 Spark SQL 中访问 python 变量?

转载 作者:行者123 更新时间:2023-12-05 09:04:23 26 4
gpt4 key购买 nike

我在 Azure Databricks 的 jupyter notebook 文件中的 %python 下创建了 python 变量。如何访问相同的变量以在 %sql 下进行比较。下面是示例:

%python

RunID_Goal = sqlContext.sql("SELECT CONCAT(SUBSTRING(RunID,1,6),SUBSTRING(RunID,1,6),'01_')
FROM RunID_Pace").first()[0]
AS RunID_Goal
%sql
SELECT Type , KPIDate, Value
FROM table
WHERE
RunID = RunID_Goal (This is the variable created under %python and want to compare over here)

当我运行它时它会抛出一个错误:SQL 语句中的错误:AnalysisException:无法解析给定输入列的“RunID_Goal”:我是新的 azure databricks 和 spark sql 任何形式的帮助将不胜感激。

最佳答案

一种解决方法是使用 Widgets在单元格之间传递参数。例如,在 Python 端,它可能如下所示:

# generate test data
import pyspark.sql.functions as F
spark.range(100).withColumn("rnd", F.rand()).write.mode("append").saveAsTable("abc")

# set widgets
import random
vl = random.randint(0, 100)
dbutils.widgets.text("my_val", str(vl))

然后您可以在 SQL 代码中引用小部件中的值:

%sql
select * from abc where id = getArgument('my_val')

会给你:

enter image description here

另一种方法是通过 Spark 配置传递变量。您可以像这样设置变量值(请注意变量应该有一个前缀 - 在本例中是 c.):

spark.conf.set("c.var", "some-value")

然后从 SQL 中将变量引用为 ${var-name}:

%sql 
select * from table where column = '${c.var}'

这样做的一个优点是您也可以将此变量用于表名等。缺点是您需要对变量进行转义,例如将字符串值放入单引号中。

关于apache-spark - 如何在 Spark SQL 中访问 python 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68794549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com