MLlibの行列分解を使用して、ユーザーにアイテムを推薦しています。私は、M = 2000万人のユーザとN = 50kのアイテムの大きな暗黙的な相互作用マトリックスを持っています。モデルを訓練した後、私は各ユーザのための短いリスト(例えば、200)の勧告を得たいと思う。私はrecommendProductsForUsers
をMatrixFactorizationModel
にしようとしましたが、非常に遅いです(9時間実行しましたが、まだまだ遠くありません。これは、recommendProductsForUsers
が全てのユーザアイテムの相互作用を計算し、各ユーザのトップを得る必要があるために期待される。Spark MLLibの大規模データセットの共同フィルタリングを高速化
スパークUIのアプリケーションの詳細から見たものから、1000人のエグゼクティブがいても数時間か1日で終了するのではないかと疑問に思っています(まだ9時間後にはflatmap
ここにあります)https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/mllib/recommendation/MatrixFactorizationModel.scala#L279-L289 、合計10000タスク、〜200完了) エグゼクティブを増やしている人の数に加えて、推薦プロセスをスピードアップするために調整できる他のものはありますか?ここで
はサンプルコードです:
val data = input.map(r => Rating(r.getString(0).toInt, r.getString(1).toInt, r.getLong(2))).cache
val rank = 20
val alpha = 40
val maxIter = 10
val lambda = 0.05
val checkpointIterval = 5
val als = new ALS()
.setImplicitPrefs(true)
.setCheckpointInterval(checkpointIterval)
.setRank(rank)
.setAlpha(alpha)
.setIterations(maxIter)
.setLambda(lambda)
val model = als.run(ratings)
val recommendations = model.recommendProductsForUsers(200)
recommendations.saveAsTextFile(outdir)
を追加しようとしたあなたは、Sparkは完全に8グラムのRAMを利用することを肯定的か?たぶんそれは本当に頻繁にディスクキャッシュをヒットします。 – stholzm