在PySpark中缓存用户和产品的潜在特性,以增强预测时间

2024-10-03 06:20:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试缓存产品特性和用户特性,以提高SparkMatrixFactorizationModel预测时间。在

我所做的:

  1. 训练模型ALS。

  2. 保存模型。

  3. 加载模型并缓存用户特性和产品特性。

代码段:

spark_config = SparkConf().setAll([('spark.executor.memory', '8g'), ('spark.cores.max', '4')])`

sc = SparkContext(conf=spark_config)

self.als_recommender = MatrixFactorizationModel.load(sc,Path)
self.als_recommender.userFeatures().cache()
self.als_recommender.productFeatures().cache()

我也收到了同样的警告预测是缓慢:-在

^{pr2}$

Tags: 用户模型selfconfigcache产品代码段时间
1条回答
网友
1楼 · 发布于 2024-10-03 06:20:57

这似乎是你先前的问题The prediction time of spark matrix factorization的后续问题。在

诀窍是,在执行预测之前,您需要对缓存的feature执行一个操作,使其工作(在scala中):

als_recommender.productFeatures().cache()
als_recommender.productFeatures().count()
als_recommender.userFeatures().cache()
als_recommender.userFeatures().count()

像这样,您将强制Spark在缓存中加载数据。在

但即便如此,你也无法得到更快的预测结果。。。(100毫秒)

我建议您阅读我的以下帖子,以了解您正在努力实现的主要挑战:

编辑:上面的代码不适用于pyspark,因为该模型实际上在幕后使用JavaRDD。在

^{pr2}$

要解决这个问题,我们需要缓存底层的JavaRDD

loaded_model._java_model.userFeatures().persist(sc._jvm.org.apache.spark.storage.StorageLevel.MEMORY_AND_DISK())

loaded_model_storage_lvl = loaded_model._java_model.userFeatures().getStorageLevel()
print("use disk : {}".format(loaded_model_storage_lvl.useDisk()))
print("use memory : {}".format(loaded_model_storage_lvl.useMemory()))
print("use off heap : {}".format(loaded_model_storage_lvl.useOffHeap()))
print("deserialized : {}".format(loaded_model_storage_lvl.deserialized()))
print("replication  : {}".format(loaded_model_storage_lvl.replication()))
# use disk : True
# use memory : True # ==> It is persisted indeed in memory and disk (line above)
# use off heap : False
# deserialized : True
# replication  : 1

PS:此解决方案是spark<;2.+所需的,因为在Apache spark的新版本中,该解决方案已添加到模型中。apachespark的新版本允许我们控制中间和最后阶段的存储级别(参见source code)。在

相关问题 更多 >