我正在从 kafka 流读取 Spark 应用程序中的数据流。我的要求是当用户提出任何请求(搜索/浏览等)时为他提供产品推荐
我已经有一个包含用户分数的经过训练的模型。我正在使用 Java 和 org.apache.spark.mllib.recommendation.MatrixFactorizationModel 模型在 Spark 应用程序启动时读取模型一次。每当有任何浏览事件时,我都会调用recommendProducts(user_id, num_of_recommished_products) API,从我现有的训练模型中为用户生成推荐。
此 API 大约需要 3-5 秒才能为每个用户生成结果,这非常慢,因此我的流处理滞后。有什么方法可以优化这个 API 的时间吗?我正在考虑将流持续时间从 15 秒增加到 1 分钟作为优化(现在不确定其结果)
最佳答案
实时调用recommendProducts
没有多大意义。由于 ALS 模型只能对用户进行预测(这已在训练数据集中看到),因此最好recommendProductsForUser
一次,将输出存储在支持按键首次查找的存储中,并从那里获取结果,当需要时。
如果无法添加存储层,您还可以获取 recommendProductsForUser
的输出,按 id、检查点和缓存预测进行分区,然后通过以下方式 join
与输入流id。
关于java - 来自 kafka 流的 Spark 应用程序需要很长时间才能产生推荐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47282892/