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)