7

尝试使用 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)
4

1 回答 1

1

不确定您是否真的需要整个 20M x 30M 矩阵。如果您只想为每个用户预先构建产品推荐,不妨尝试recommendProducts(user: Int, num: Int)为所有用户尝试,将自己限制在num最强的推荐范围内。还有recommendUsers().

于 2015-04-11T15:54:32.080 回答