7

Próba zbudowania systemu rekomendacji za pomocą ALS Spark MLLib.Zalecenia Apache Spark ALS podejście

Obecnie staramy się na bieżąco budować rekomendacje dla wszystkich użytkowników. Używamy prostych niejawnych komentarzy i ALS.

Problem polega na tym, że mamy 20 milionów użytkowników i 30 milionów produktów, i aby wywołać metodę main predict(), potrzebujemy połączenia kartezjańskiego dla użytkowników i produktów, który jest zbyt duży i może zająć kilka dni. tylko dołączenie. Czy istnieje sposób na uniknięcie łączenia kartezjańskiego, aby przyspieszyć proces?

Obecnie mamy 8 węzłów z 64 GB pamięci RAM, myślę, że powinno wystarczyć dla danych.

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

Pokaż nam kod, abyśmy mogli pomóc –

+0

Dzięki, zaktualizowałem swój pierwszy wpis. –

Odpowiedz

1

Nie jestem pewien, czy naprawdę potrzebujesz całej matrycy 20M x 30M. Jeśli chcesz tylko wstępnie przygotować zalecenia dla produktów na użytkownika, możesz spróbować dla wszystkich użytkowników recommendProducts(user: Int, num: Int), ograniczając się do najsilniejszych rekomendacji. Istnieje również recommendUsers().