火花矩阵分解的预测时间

时间:2017-08-22 13:00:41

标签: python apache-spark recommendation-engine

我有简单的Python应用程序。 采用具有user_id,product_id,rating的ratings.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)

1 个答案:

答案 0 :(得分:1)

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

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

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