在 Pyspark 中执行 Python 函数生成的变量

Posted

技术标签:

【中文标题】在 Pyspark 中执行 Python 函数生成的变量【英文标题】:Execute Variable Generated by Python Function in Pyspark 【发布时间】:2021-03-10 22:38:10 【问题描述】:

我开发了一个通用的 python 函数,它生成一个我想在 spark 中执行的变量,以便获得所需的 Dataframe,详细信息如下(假设我直接使用 pyspark shell):

#This is pyspark shell in cloudera platform

#Python Function
def generic_func(PARAMETERS):
 #Some operations
 return String_VARIABLE_To_Be_Executed

#Calling the function
df = generic_func(PARAMETERS)
exec(df)

但似乎 spark 仍在将其作为字符串变量读取,因为当我执行以下代码时出现错误:

df.show()

我收到以下错误:

AttributeError: 'str' object has no attribute 'show'

只是为了给你一些上下文,通过启动:

df

变量生成如下内容:

"accountDF.alias('L1').join(account.alias('L2'), f.col('L1.MEMBERNAME') == f.col('L2.PARENT_NAME'), how='left')"

变量的输出比这更复杂,这里只是告诉你变量有一些spark函数需要执行。

type(df)
<type 'str'>

我们的观点是执行这个变量,就像我们正在执行任何 pyspark 数据帧函数一样。换句话说,我们想把这个字符串变量变成一个可执行的 pyspark 变量。

你能帮忙吗!

【问题讨论】:

能否附上通用函数的确切代码。我怀疑返回值是字符串类型,可以通过type(df)确认更新 是的,它是我上面指定的字符串,请检查更新!有没有办法将此字符串转换为可执行的 spark 变量? @SudipM 我没听错你的问题吗? 【参考方案1】:

可以使用 exec(df)eval(df) 两个选项来获取输出结果/数据帧,如下所示:

df = generic_func(PARAMETERS)
result = eval(df)
result.show()

【讨论】:

以上是关于在 Pyspark 中执行 Python 函数生成的变量的主要内容,如果未能解决你的问题,请参考以下文章

尝试通过数据框在 Pyspark 中执行用户定义的函数时出错

Pyspark 函数本身可以正常工作,但在包装在 UDF 中时不执行任务

Pyspark:从随机项目函数创建一个集合

在 PySpark 中涉及带有管道的子进程的映射步骤失败

在 PySpark 并行执行上下文中使用 JAR 依赖项

独家 | PySpark和SparkSQL基础:如何利用Python编程执行Spark(附代码)