MLlib协同过滤生成Top N推荐
MLlib collaborative filtering to generate Top N recommendations
我一直在寻找一种方法来使用 MLlib 的 ALS 矩阵分解为所有用户生成前 n 个推荐,但仍然没有成功。谁能告诉我是否存在这样的方法?
这是我目前的方法,似乎非常慢:
Iterator<Rating> it = ratings.toLocalIterator();
while (it.hasNext()) {
int user = it.next().user();
if (!userList.contains(user)) {
Rating[] rat = model.recommendProducts(user, 10);
for (Rating r : rat) {
list.add(user + "," + r.product() + "," + r.rating());
}
userList.add(user);
}
}
任何有效的方法将不胜感激。
您上面的结构是使用 Spark ALS 的正确结构。但是你要求很多集群为所有用户推荐 - 如果你有一个小集群可以工作。
您首先要确定:ONE用户多长时间?然后将其乘以 # 用户 - 您可能会发现您的要求太多了。
可能存在集群问题/配置设置不理想 and/or 总体而言,集群与您的要求相比动力不足。
您可以使用:
model.recommendProductsForUsers(int num)
这可以从 spark 1.4 获得
https://spark.apache.org/docs/latest/api/java/org/apache/spark/mllib/recommendation/MatrixFactorizationModel.html#recommendProductsForUsers(int)
我一直在寻找一种方法来使用 MLlib 的 ALS 矩阵分解为所有用户生成前 n 个推荐,但仍然没有成功。谁能告诉我是否存在这样的方法?
这是我目前的方法,似乎非常慢:
Iterator<Rating> it = ratings.toLocalIterator();
while (it.hasNext()) {
int user = it.next().user();
if (!userList.contains(user)) {
Rating[] rat = model.recommendProducts(user, 10);
for (Rating r : rat) {
list.add(user + "," + r.product() + "," + r.rating());
}
userList.add(user);
}
}
任何有效的方法将不胜感激。
您上面的结构是使用 Spark ALS 的正确结构。但是你要求很多集群为所有用户推荐 - 如果你有一个小集群可以工作。
您首先要确定:ONE用户多长时间?然后将其乘以 # 用户 - 您可能会发现您的要求太多了。
可能存在集群问题/配置设置不理想 and/or 总体而言,集群与您的要求相比动力不足。
您可以使用:
model.recommendProductsForUsers(int num)
这可以从 spark 1.4 获得 https://spark.apache.org/docs/latest/api/java/org/apache/spark/mllib/recommendation/MatrixFactorizationModel.html#recommendProductsForUsers(int)