python—使用pyspark将Dataframe中的列调用到函数中

gfttwv5a  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(632)

我正在尝试将列调用到函数中。当我试着用下面的方法工作时

df = sqlContext.sql("select col1 from sample")
def samp(col1):
    if col1 ==21: return 'A'
    else: return 'B'

udfsamp = udf(samp,StringType())
df.withColumn("cate",udfsamp("col1")).show()

但是当我通过在一个单独的srcsamp.py文件中定义并执行以下操作来调用函数时

from srcsamp import samp
df = sqlContext.sql("select col1 from sample")
samp(col1)
udfsamp = udf(samp,StringType())
df.withColumn("cate",udfsamp("col1")).show()

我得到以下错误

NameError: name 'col1' is not defined

这是从Dataframe调用列的正确方法吗?
提前谢谢伙计们

bqjvbblv

bqjvbblv1#

确保您确实可以加载这个python包:您是否已将py文件的父目录添加到 sys.path .
由于要在udf中使用py文件中包含的函数,因此必须使用 --py-files srcsamp.py 运行应用程序时(无论是笔记本、pyspark shell还是spark submit)
正如@prem所说 col1 从来没有在你的剧本里开始这么召唤 samp(col1) 不起作用。

相关问题