给定MatrixFactorizationModel什么是返回用户产品预测的完整矩阵的最有效方法(在实践中,按一些阈值过滤以保持稀疏性)?
通过当前的API,曾经可以将用户产品的笛卡尔产品传递给预测函数,但在我看来,这将进行大量的额外处理。
访问私有userFeatures,productFeatures是正确的方法,如果是这样,有没有一种好方法利用框架的其他方面以有效的方式分发这个计算?具体来说,是否有一种简单的方法可以做得比将所有的userFeature,productFeature“手动”成倍增加更好?
答案 0 :(得分:5)
Spark 1.1有一个recommendProducts
方法,可以映射到每个用户ID。这比没有好,但没有真正优化,无法向所有用户推荐。
我会仔细检查你是否真的想为每个人提出建议;在规模上,这本质上是一个很大的缓慢操作。考虑预测最近才有效的用户。
否则,是的,最好的办法是创建自己的方法。特征RDD的笛卡尔连接可能太慢,因为它改变了特征向量的这么多副本。选择较大的用户/产品功能集,然后映射。在每个工作程序中,将每个工作程序中的其他产品/用户功能集保存在内存中。如果这不可行,你可以使它更复杂,并对内存中较小RDD的子集进行多次映射。
答案 1 :(得分:0)
从Spark 2.2开始,recommendProductsForUsers(num)
就是方法。
为所有用户推荐顶级“num”数量的产品。每个用户返回的推荐数量可能小于“num”。
https://spark.apache.org/docs/2.2.0/api/python/pyspark.mllib.html