加载已保存的MatrixFactorizationModel后,我收到警告: MatrixFactorizationModelWrapper:产品因子没有分区程序。对个别记录的预测可能很慢。 MatrixFactorizationModelWrapper:不缓存产品因子。预测可能很慢。
实际上计算速度慢,不能很好地扩展
如何设置分区器并缓存Product factor?
添加演示问题的代码:
from pyspark import SparkContext
import sys
sc = SparkContext("spark://hadoop-m:7077", "recommend")
from pyspark.mllib.recommendation import ALS, MatrixFactorizationModel, Rating
model = MatrixFactorizationModel.load(sc, "model")
model.productFeatures.cache()
我得到:
追踪(最近一次通话): 文件" /home/me/recommend.py" ;,第7行,in model.productFeatures.cache() AttributeError:'功能'对象没有属性'缓存'
答案 0 :(得分:4)
关于缓存,就像我在评论框中写的那样,您可以缓存您的rdd执行以下操作:
rdd.cache() # for Scala, Java and Python
编辑:userFeatures和productFeatures都是RDD [(Int,Array [Double])类型。 (参考Official Documentation)
要缓存productFeature,您可以执行以下操作
model.productFeatures().cache()
当然我认为加载的模型叫做模型。
示例:
r1 = (1, 1, 1.0)
r2 = (1, 2, 2.0)
r3 = (2, 1, 2.0)
ratings = sc.parallelize([r1, r2, r3])
from pyspark.mllib.recommendation import ALS
model = ALS.trainImplicit(ratings, 1, seed=10)
model.predict(2, 2)
feats = model.productFeatures()
type(feats)
>> MapPartitionsRDD[137] at mapPartitions at PythonMLLibAPI.scala:1074
feats.cache()
至于有关分区程序的警告,即使你对模型进行分区,也可以通过.partitionBy()的功能来说明它以平衡它仍然是太昂贵的性能。
有关此问题的JIRA票证(SPARK-8708)应在下一版Spark(1.5)中解决。
尽管如此,如果您想了解有关分区算法的更多信息,我邀请您阅读此故障单SPARK-3717中的讨论,其中讨论了DecisionTree和RandomForest算法中的功能划分。