【问题标题】:The prediction time of spark matrix factorization火花矩阵分解的预测时间
【发布时间】:2018-01-30 18:50:53
【问题描述】:

我有一个简单的 Python 应用程序。 获取有 user_id、product_id、rating 的 rating.csv 其中包含 4 M 记录,然后我使用 Spark AlS 并保存模型,然后将其加载到 matrixFactorization。

我的问题是预测用户和产品之间的评分需要超过一秒钟的时间。 我的服务器是 32 G 和 8 核。 任何建议我如何将预测时间提高到小于 100 毫秒。 以及数据集中的多条记录与预测时间的关系。

这是我正在做的事情:

spark_config = SparkConf().setAll([('spark.executor.memory', '32g'), ('spark.cores.max', '8')]) 
als_recommender.sc = SparkContext(conf=spark_config) #training_data is array of tulips of 4 M record 
training_data = als_recommender.sc.parallelize(training_data) als_recommender.model = ALS.trainImplicit(training_data, 10, 10, nonnegative=True) 
als_recommender.model.save(als_recommender.sc, "....Ameer/als_model") 
als_recommender_model = MatrixFactorizationModel.load(als_recommender.sc, "....Ameer/als_model") 
als_recommender_model.predict(1,2913)

【问题讨论】:

  • 我们需要查看您的代码。
  • spark_config = SparkConf().setAll([('spark.executor.memory', '32g'), ('spark.cores.max', '8')]) als_recommender.sc = SparkContext(conf=spark_config) #training_data 是 4 M 记录的郁金香数组 training_data = als_recommender.sc.parallelize(training_data) als_recommender.model = ALS.trainImplicit(training_data, 10, 10, nonnegative=True) als_recommender.model.save( als_recommender.sc, "....Ameer/als_model") als_recommender_model = MatrixFactorizationModel.load(als_recommender.sc, "....Ameer/als_model") als_recommender_model.predict(1,2913);

标签: python apache-spark recommendation-engine


【解决方案1】:

基本上,您不希望每次需要回答时都加载完整模型。

根据模型更新频率和预测查询的数量,我会:

  • 将模型保存在内存中并能够从那里回答查询。对于小于 100 毫秒的答案,您需要测量每一步。 Livy 可能是一个不错的选择,但我不确定它的开销。
  • 输出每个用户的前 X 个预测并将它们存储在 DB 中。 Redis 是一个很好的候选者,因为它速度快,值可以是一个列表

【讨论】:

    猜你喜欢
    • 2017-04-07
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 2016-10-15
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多