Ara*_*yan 7 recommendation-engine machine-learning bigdata apache-spark apache-spark-mllib
尝试使用Spark MLLib的ALS构建推荐系统.
目前,我们正在尝试每天为所有用户预建建议.我们使用简单的隐式反馈和ALS.
问题是,我们有20M用户和30M产品,并且要调用主要的predict()方法,我们需要为用户和产品进行笛卡尔连接,这太大了,并且可能需要几天才能生成连接.有没有办法避免笛卡尔联合使流程更快?
目前我们有8个节点,64Gb的RAM,我认为它应该足够的数据.
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)
Run Code Online (Sandbox Code Playgroud)
不确定您是否真的需要整个 20M x 30M 矩阵。如果您只想为每个用户的产品预先构建推荐,则可以尝试recommendProducts(user: Int, num: Int)为所有用户提供建议,将自己限制为num最强的推荐。还有recommendUsers()。
| 归档时间: |
|
| 查看次数: |
1003 次 |
| 最近记录: |