Apache Spark ALS建议方法

时间:2015-03-18 10:42:09

标签: apache-spark machine-learning bigdata recommendation-engine 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)

1 个答案:

答案 0 :(得分:1)

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