尝试使用 Spark MLLib 的 ALS 构建推荐系统。
目前,我们正在尝试每天为所有用户预先构建推荐。我们正在使用简单的隐式反馈和 ALS。
问题是,我们有 20M 用户和 30M 产品,要调用 main 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)