首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Spark中访问python变量?

如何在Spark中访问python变量?
EN

Stack Overflow用户
提问于 2021-08-15 18:57:24
回答 4查看 3.5K关注 0票数 2

在中的jupyter笔记本文件中,在%python下面创建了python变量。如何访问同一个变量以在%sql下进行比较。下面是一个例子:

代码语言:javascript
复制
%python

RunID_Goal = sqlContext.sql("SELECT CONCAT(SUBSTRING(RunID,1,6),SUBSTRING(RunID,1,6),'01_') 
FROM RunID_Pace").first()[0] 
AS RunID_Goal
代码语言:javascript
复制
%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,并激发sql --任何类型的帮助都会很感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-08-28 07:36:49

解决方法之一是使用窗口小部件在单元格之间传递参数。例如,在Python方面,可以如下所示:

代码语言:javascript
复制
# 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代码中小部件的值:

代码语言:javascript
复制
%sql
select * from abc where id = getArgument('my_val')

会给你:

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

代码语言:javascript
复制
spark.conf.set("c.var", "some-value")

然后在SQL中将变量称为${var-name}

代码语言:javascript
复制
%sql 
select * from table where column = '${c.var}'

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

票数 5
EN

Stack Overflow用户

发布于 2021-08-16 08:27:43

您无法访问此变量。这是在文档中解释的

当您调用语言魔术命令时,命令会在笔记本的执行上下文中被分派到REPL。在一种语言中定义的变量(因此在该语言的REPL中定义)在另一种语言的REPL中不可用。REPL只能通过外部资源(如DBFS中的文件或对象存储中的对象)共享状态。

票数 2
EN

Stack Overflow用户

发布于 2022-01-09 11:21:32

这是另一个解决办法。

代码语言:javascript
复制
# Optional code to use databricks widgets to assign python variables
dbutils.widgets.text('my_str_col_name','my_str_col_name')
dbutils.widgets.text('my_str_col_value','my_str_col_value')
my_str_col_name = dbutils.widgets.get('my_str_col_name')
my_str_col_value = dbutils.widgets.get('my_str_col_value')

# Query with string formatting
query = """
select *
from my_table
where {0} < '{1}'
"""

# Modify query with the values of Python variable 
query = query.format(my_str_col_name,my_str_col_value)

# Execute the query
display(spark.sql(query))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68794549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档