0

我正在从 kafka 流中读取我的 spark 应用程序中的数据流。我的要求是在用户提出任何请求(搜索/浏览等)时为他提供产品推荐

我已经有一个包含用户分数的训练模型。我正在使用 Java 和 org.apache.spark.mllib.recommendation.MatrixFactorizationModel 模型在我的 spark 应用程序启动时读取模型一次。每当有任何浏览事件时,我都会调用 RecommendationProducts(user_id, num_of_recommended_products) API 从我已经存在的训练模型中为用户生成推荐。

这个 API 需要大约 3-5 秒来为每个用户生成结果,这非常慢,因此我的流处理落后了。有什么方法可以优化这个 API 的时间吗?我正在考虑将流持续时间从 15 秒增加到 1 分钟作为优化(现在不确定它的结果)

4

1 回答 1

1

实时调用recommendProducts,没有多大意义。由于 ALS 模型只能为用户进行预测,这已在训练数据集中看到,因此最好recommendProductsForUser将输出存储在支持首次按键查找的存储中,并在需要时从那里获取结果。

如果添加存储层不是一个选项,您还可以输出recommendProductsForUser,按 id 分区,检查点和缓存预测,然后join按 id 输入流。

于 2017-11-14T10:16:44.483 回答