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')
てみると、「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 を実行する必要があります。