7

Versuch Empfehlungssystem mit Funken MLLib des ALS zu bauen.Apache Spark-ALS Empfehlungen nähern

Derzeit versuchen wir zu Empfehlungen für alle Benutzer auf täglicher Basis Präbuildereignis. Wir verwenden einfache implizite Rückmeldungen und ALS.

Das Problem ist, wir haben 20M Benutzer und 30M Produkte, und die Haupt-Predic() -Methode aufrufen, müssen wir die kartesischen Join für Benutzer und Produkte, die zu groß ist, und es kann Tage dauern zu generieren nur der Beitritt. Gibt es eine Möglichkeit, eine kartesische Verbindung zu vermeiden, um den Prozess schneller zu machen?

Derzeit haben wir acht Knoten mit 64 GB RAM, ich denke, es sollte für die Daten ausreichen.

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

Bitte zeigen Sie uns Ihren Code, so dass wir –

+0

Dank helfen kann, habe ich meinen ersten Beitrag aktualisiert. –

Antwort

1

Nicht sicher, ob Sie wirklich die ganze 20M x 30M Matrix benötigen. Falls Sie nur Empfehlungen für Produkte pro Benutzer bauen vorge, versuchen vielleicht recommendProducts(user: Int, num: Int) für alle Benutzer, sich auf die num stärksten Empfehlungen zu begrenzen. Es gibt auch recommendUsers().