【问题标题】:PySpark: UDF is not executing on a dataframePySpark:UDF 未在数据帧上执行
【发布时间】:2016-03-24 05:26:27
【问题描述】:

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

【问题讨论】:

    标签: python pyspark apache-spark-sql user-defined-functions pyspark-sql


    【解决方案1】:
    1. 您不会看到输出,因为print 在工作节点上执行并转到相应的输出。有关完整说明,请参阅Why does foreach not bring anything to the driver program?

    2. foreachRDD 而不是 DataFrame 上运行。 UDFs 在此上下文中无效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多