java - 来自 kafka 流的 Spark 应用程序需要很长时间才能产生推荐

标签 java apache-spark apache-kafka matrix-factorization

我正在从 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/

相关文章:

java - 在 Android Studio 中使用 JRuby

apache-spark - 如何在 EMR 上为 Spark/Zeppelin 设置 spark.driver.memory

apache-spark - 使用 Spark Streaming 读取 Kafka 记录时出现不可序列化异常

Java 泛型 - 将函数映射到列表

java - Android的音频记录不起作用

json - 当我尝试在 spark 上解析 Json 时出现 java.lang.NoSuchMethodError

python - 如何在 Pyspark 中将行分成多行

apache-spark - java.lang.AssertionError : assertion failed When join on stream Spark 错误

elasticsearch - 从kafka导入数据到Elasticsearch时如何获取导入进度和错误日志?

java - 多个映射到 Spring 中 Controller 的相同方法