7

Spark MLLib'in ALS programını kullanarak öneri sistemi oluşturmaya çalışıyorum.Apache Spark ALS önerileri yaklaşımı

Şu anda, günlük olarak tüm kullanıcılar için ön öneriler oluşturmaya çalışıyoruz. Basit örtülü geri bildirimler ve ALS kullanıyoruz.

Sorun şu ki, 20M kullanıcı ve 30M ürünümüz var ve ana tahmin() yöntemini çağırmak için, çok büyük olan kullanıcılar ve ürünler için kartezyen birleştirme yapmamız gerekiyor ve üretilmesi günler alabilir. sadece birleşme. Süreci daha hızlı hale getirmek için kartezyen birleşimden kaçınmanın bir yolu var mı?

Şu anda 64 Gb RAM içeren 8 düğümümüz var, bunun veri için yeterli olması gerektiğini düşünüyorum.

val users: RDD[Int] = ???   // RDD with 20M userIds 
val products: RDD[Int] = ???  // RDD with 30M productIds 
val ratings : RDD[Rating] = ???  // RDD with all user->product feedbacks 

val model = new ALS().setRank(10).setIterations(10) 
    .setLambda(0.0001).setImplicitPrefs(true) 
    .setAlpha(40).run(ratings) 

val usersProducts = users.cartesian(products) 
val recommendations = model.predict(usersProducts) 
+0

Lütfen kodunuzu bize bildirin, biz de yardım edebiliriz –

+0

Teşekkürler, İlk gönderiyi güncelledim. –

cevap

1

20M x 30M matrisinin tamamına ihtiyacınız olup olmadığından emin değilsiniz. Sadece kullanıcı başına ürün önerilerini önceden oluşturmak isterseniz, tüm kullanıcılar için'u deneyebilir ve num güçlü tavsiyelerini sınırlayabilirsiniz. Ayrıca recommendUsers() da var.

İlgili konular