1

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 を実行する必要があります。

4

1 に答える 1

2
  1. printはワーカー ノードで実行され、それぞれの出力に移動するため、出力は表示されません。foreach がドライバー プログラムに何ももたらさないのはなぜですか?を参照してください。完全な説明のために。

  2. foreachRDDではなく で動作しDataFrameます。UDFsこのコンテキストでは無効です。

于 2016-03-24T14:42:13.263 に答える