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'
关于缓存,就像我在评论框中所写的那样,您可以执行以下操作来缓存 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中的讨论,该讨论讨论了按决策树和随机森林算法中的功能进行分区。
| 归档时间: |
|
| 查看次数: |
1383 次 |
| 最近记录: |