PySpark 中 MatrixFactorizationModel 的缓存因子
Caching factor of MatrixFactorizationModel in PySpark
加载保存的 MatrixFactorizationModel 后,我收到警告:
MatrixFactorizationModelWrapper:乘积因子没有分区器。对个别记录的预测可能很慢。
MatrixFactorizationModelWrapper:未缓存乘积因子。预测可能会很慢。
而且计算确实很慢,而且无法很好地扩展
如何设置分区程序并缓存产品因子?
添加演示问题的代码:
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 行,位于
model.productFeatures.cache()
AttributeError: 'function' 对象没有属性 'cache'
关于缓存,就像我在评论框中写的那样,您可以缓存您的 rdd,执行以下操作:
rdd.cache() # for Scala, Java and Python
EDIT: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 算法中按特征进行分区。
加载保存的 MatrixFactorizationModel 后,我收到警告: MatrixFactorizationModelWrapper:乘积因子没有分区器。对个别记录的预测可能很慢。 MatrixFactorizationModelWrapper:未缓存乘积因子。预测可能会很慢。
而且计算确实很慢,而且无法很好地扩展
如何设置分区程序并缓存产品因子?
添加演示问题的代码:
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 行,位于 model.productFeatures.cache() AttributeError: 'function' 对象没有属性 'cache'
关于缓存,就像我在评论框中写的那样,您可以缓存您的 rdd,执行以下操作:
rdd.cache() # for Scala, Java and Python
EDIT: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 算法中按特征进行分区。