PySpark:UDF 未在数据帧上执行



我在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。

  1. 您不会看到输出,因为print在工作器节点上执行并转到相应的输出。请参阅为什么foreach不会为驱动程序带来任何内容?以获得完整的解释。

  2. foreachRDD而不是DataFrame上运行。 在这种情况下,UDFs无效。

相关内容

  • 没有找到相关文章

最新更新