我在Azure上使用Jupyter中的PySpark。我试图在数据帧上使用UDF进行测试,但是UDF没有执行。
我的数据框由以下人员创建:
users = sqlContext.sql("SELECT DISTINCT userid FROM FoodDiaryData")
我已确认此数据框填充了100行。在下一个单元格中,我尝试执行一个简单的udf。
def iterateMeals(user):
print user
users.foreach(iterateMeals)
这不会产生任何输出。我原本期望数据框中的每个条目都已打印出来。但是,如果我只是尝试iterateMeals('test')
,它将触发并打印“测试”。我也尝试过使用pyspark.sql.functions
from pyspark.sql.functions import udf
def iterateMeals(user):
print user
f_iterateMeals = udf(iterateMeals,LongType())
users.foreach(f_iterateMeals)
当我尝试这个时,我收到以下错误:
Py4JError: An error occurred while calling o461.__getnewargs__. Trace:
py4j.Py4JException: Method __getnewargs__([]) does not exist
有人可以解释我哪里出错吗?我将需要在此应用程序的.foreach
数据帧内执行udfs。
答案 0 :(得分:2)
您将看不到输出,因为print
在工作节点上执行并转到相应的输出。有关完整说明,请参阅Why does foreach not bring anything to the driver program?。
foreach
对RDD
而不是DataFrame
进行操作。 UDFs
在此上下文中无效。