16

PySpark と MLlib を使用して Spark 1.3.0 を使用しています。モデルを保存して読み込む必要があります。このようなコードを使用します(公式ドキュメントから取得)

from pyspark.mllib.recommendation import ALS, MatrixFactorizationModel, Rating

data = sc.textFile("data/mllib/als/test.data")
ratings = data.map(lambda l: l.split(',')).map(lambda l: Rating(int(l[0]), int(l[1]), float(l[2])))
rank = 10
numIterations = 20
model = ALS.train(ratings, rank, numIterations)
testdata = ratings.map(lambda p: (p[0], p[1]))
predictions = model.predictAll(testdata).map(lambda r: ((r[0], r[1]), r[2]))
predictions.collect() # shows me some predictions
model.save(sc, "model0")

# Trying to load saved model and work with it
model0 = MatrixFactorizationModel.load(sc, "model0")
predictions0 = model0.predictAll(testdata).map(lambda r: ((r[0], r[1]), r[2]))

model0 を使用しようとすると、次のような長いトレースバックが返されます。

Py4JError: An error occurred while calling o70.predict. Trace:
py4j.Py4JException: Method predict([class org.apache.spark.api.java.JavaRDD]) does not exist
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:333)
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:342)
    at py4j.Gateway.invoke(Gateway.java:252)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:207)
    at java.lang.Thread.run(Thread.java:745)

だから私の質問は - 私は何か間違ったことをしていますか? 私がデバッグした限り、モデルは (ローカルおよび HDFS 上に) 保存されており、いくつかのデータを含む多くのファイルが含まれています。モデルは正しく保存されているように感じますが、おそらく正しくロードされていません。私もグーグルで検索しましたが、関連するものは何も見つかりませんでした。

この save\load 機能は最近 Spark 1.3.0 に追加されたようです。このため、別の質問があります - リリース 1.3.0 より前のモデルを保存\ロードする推奨方法は何でしたか? 少なくとも Python については、これを行う良い方法が見つかりませんでした。Pickle も試してみましたが、ここで説明したのと同じ問題に直面しましたApache Spark mllib モデルを Python に保存する

4

4 に答える 4

2

私もこれに出くわしました-それはバグのようです。spark jiraに報告しました。

于 2015-03-27T13:52:00.327 に答える