在 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 中执行用户定义的函数时出错