6

Öğeleri kullanıcılara önermek için MLlib'in matris çarpanlarını kullanıyorum. M = 20 milyon kullanıcının ve N = 50k öğesinin büyük bir örtük etkileşim matrisine sahibim. Modeli eğitdikten sonra, her kullanıcı için kısa bir liste (ör. 200) önermek istiyorum. MatrixFactorizationModel numaralı telefondan recommendProductsForUsers'u denedim ancak çok yavaş (9 saat koştu ama yine de bitim bitmedi. Her biri 8g hafızalı 50 uygulayıcı ile test ediyorum). Bu, recommendProductsForUsers tüm M*N kullanıcı öğesi etkileşimlerini hesaplamak ve her kullanıcı için en iyi şekilde alması gerektiği için beklenebilir.Spark MLLib'deki büyük veri kümesi için ortak filtrelemeyi hızlandırın

Daha fazla yürütücüyü kullanacağım ancak Spark kullanıcı arabirimindeki uygulama detayından gördüğüm kadarıyla, saatlerce veya günde 1000 işçiyi bitirebileceğinden şüphe duyuyorum (9 saat sonra hala flatmap burada https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/mllib/recommendation/MatrixFactorizationModel.scala#L279-L289 , 10000 toplam görev ve sadece ~ 200 bitmiş) Öneriler sürecini hızlandırmak için ayarlayabileceğim başka bir şey var mı?

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

size pozitif Are Executor başına daha fazla bellek ve havai kıvılcım bellek eklemeyi denediniz mi? Belki disk önbelleğine gerçekten sık rastlar. – stholzm

cevap

1

@Jack Lei: Burada

örnek kod bu cevabını buldunuz mu? Ben sadece birkaç şey denedim ama sadece biraz yardımcı oldu. eg için

: Ben aradaki hesaplama tekrarlanan kaçının çünkü bu yardımcı olur

javaSparkContext.setCheckpointDir("checkpoint/"); 

çalıştı.

Ayrıca Kıvılcım tamamen 8g RAM kullanır şeklinde

--conf spark.driver.maxResultSize=5g --conf spark.yarn.executor.memoryOverhead=4000 
İlgili konular