PySpark中MatrixFactorizationModel的缓存因子

mic*_*ich 5 apache-spark rdd pyspark apache-spark-mllib

加载保存的MatrixFactorizationModel后,我收到警告:MatrixFactorizationModelWrapper:Product factor没有分区器.对个别记录的预测可能很慢.MatrixFactorizationModelWrapper:不缓存产品因子.预测可能很慢.

实际上计算速度很慢,并且不能很好地扩展

如何设置分区器并缓存Product因子?

添加演示此问题的代码:

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()
Run Code Online (Sandbox Code Playgroud)

我得到:

回溯(最近调用最后一次):文件"/home/me/recommend.py",第7行,在model.productFeatures.cache()中AttributeError:'function'对象没有属性'cache'

eli*_*sah 4

关于缓存,就像我在评论框中所写的那样,您可以执行以下操作来缓存 rdd:

rdd.cache() # for Scala, Java and Python
Run Code Online (Sandbox Code Playgroud)

编辑: userFeatures 和 ProductFeatures 都是 RDD[(Int, Array[Double]) 类型。(参考官方文档

要缓存productFeature,您可以执行以下操作

model.productFeatures().cache() 
Run Code Online (Sandbox Code Playgroud)

当然我认为加载的模型就叫模型。

例子 :

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()
Run Code Online (Sandbox Code Playgroud)

至于有关分区器的警告,即使您对模型进行分区,比如说通过 .partitionBy() 功能来平衡它,它仍然会导致性能过于昂贵。

有一个关于此问题的 JIRA 票证 ( SPARK-8708 ) 应在 Spark (1.5) 的下一版本中解决。

不过,如果您想了解有关分区算法的更多信息,我邀请您阅读此票证SPARK-3717中的讨论,该讨论讨论了按决策树和随机森林算法中的功能进行分区。