我正在尝试将列调用到函数中。当我试着用下面的方法工作时
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调用列的正确方法吗?
提前谢谢伙计们
1条答案
按热度按时间bqjvbblv1#
确保您确实可以加载这个python包:您是否已将py文件的父目录添加到
sys.path
.由于要在udf中使用py文件中包含的函数,因此必须使用
--py-files srcsamp.py
运行应用程序时(无论是笔记本、pyspark shell还是spark submit)正如@prem所说
col1
从来没有在你的剧本里开始这么召唤samp(col1)
不起作用。