7

Cercando di costruire sistema di raccomandazione utilizzando ALS di Spark MLLib.Apache Spark ALS raccomandazioni approccio

Attualmente, stiamo provando a pre-creare consigli per tutti gli utenti su base giornaliera. Stiamo usando semplici feedback impliciti e ALS.

Il problema è che abbiamo 20 milioni di utenti e 30 milioni di prodotti e, per chiamare il metodo predizione principale(), è necessario disporre dell'unione cartesiana per utenti e prodotti, che è troppo grande e potrebbero essere necessari giorni per generare solo il join. C'è un modo per evitare il join cartesiano per rendere il processo più veloce?

Attualmente abbiamo 8 nodi con 64 GB di RAM, penso che dovrebbe essere sufficiente per i dati.

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

Mostraci il tuo codice in modo che possiamo aiutare –

+0

Grazie, ho aggiornato il mio post iniziale. –

risposta

1

Non so se davvero avete bisogno dell'intera matrice 20M x 30M. Nel caso in cui desideri solo pre-compilare consigli per prodotti per utente, prova il recommendProducts(user: Int, num: Int) per tutti gli utenti, limitandoti ai più forti consigli num. C'è anche recommendUsers().