Spark MLLib の ALS を使用してレコメンデーション システムを構築しようとしています。
現在、すべてのユーザー向けの推奨事項を毎日事前に作成しようとしています。単純な暗黙のフィードバックと ALS を使用しています。
問題は、2,000 万人のユーザーと 3,000 万の製品があり、メインの predict() メソッドを呼び出すには、ユーザーと製品のデカルト結合が必要であり、これは大きすぎて、結合だけを生成するのに数日かかる場合があることです。デカルト結合を回避してプロセスを高速化する方法はありますか?
現在、64Gb の RAM を搭載した 8 つのノードがあり、データには十分だと思います。
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)