6

MLlibの行列分解を使用して、ユーザーにアイテムを推薦しています。私は、M = 2000万人のユーザとN = 50kのアイテムの大きな暗黙的な相互作用マトリックスを持っています。モデルを訓練した後、私は各ユーザのための短いリスト(例えば、200)の勧告を得たいと思う。私はrecommendProductsForUsersMatrixFactorizationModelにしようとしましたが、非常に遅いです(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) 
+0

を追加しようとしたあなたは、Sparkは完全に8グラムのRAMを利用することを肯定的か?たぶんそれは本当に頻繁にディスクキャッシュをヒットします。 – stholzm

答えて

1

@Jackレイ:あなたはこの答えを見つけましたか? 私は自分でいくつかのことを試しましたが、少しだけ助けました。例えばのために

:私は、これはそれが間で繰り返し計算を避けることができますbecuase

javaSparkContext.setCheckpointDir("checkpoint/"); 

を試してみました。

はまた、エグゼキュータごとに、より多くのメモリとオーバーヘッドスパークメモリ

--conf spark.driver.maxResultSize=5g --conf spark.yarn.executor.memoryOverhead=4000 
関連する問題