apache-spark - 如何在 Spark Streaming 作业期间更新 ML 模型而不重新启动应用程序?

标签 apache-spark machine-learning spark-streaming

我有一份 Spark Streaming 工作,其目标是:

  • 读取一批消息
  • 使用预先训练的机器学习管道根据这些消息预测变量 Y

问题是,我希望能够更新执行器使用的模型,而无需重新启动应用程序。

简单地说,它是这样的:

model = #model initialization

def preprocess(keyValueList):
    #do some preprocessing

def predict(preprocessedRDD):
    if not preprocessedRDD.isEmpty():
        df = #create df from rdd
        df = model.transform(df)
        #more things to do

stream = KafkaUtils.createDirectStream(ssc, [kafkaTopic], kafkaParams)

stream.mapPartitions(preprocess).foreachRDD(predict)

在本例中,仅使用模型。未更新。

我考虑过几种可能性,但现在我把它们全部划掉了:

  • 每次模型更改时都会广播模型(无法更新,只读)
  • 从执行器上的 HDFS 读取模型(它需要 SparkContext,因此不可能)

有什么想法吗?

非常感谢!

最佳答案

我之前用两种不同的方式解决了这个问题:

  • 模型上的 TTL
  • 重新读取每个批处理的模型

这两种解决方案都需要对您定期积累的数据进行额外的职业培训(例如每天一次)。

关于apache-spark - 如何在 Spark Streaming 作业期间更新 ML 模型而不重新启动应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43387114/

相关文章:

python-3.x - 为什么我的损失函数返回负值?

java - Databricks Spark 引用应用程序 : State maintenance using static variables in Spark Streaming

postgresql - Spark 流式传输多个源,重新加载数据帧

hadoop - 为什么 Apache Spark worker executor 以退出状态 1 被杀死?

python - 验证 pyspark dataframe 中列的数据类型

machine-learning - 告诉 Weka 在 ARFF 文件中预测哪些属性?

apache-spark - 如何在Apache Spark中链接多个作业

apache-spark - 为什么 StandardScaler 不将元数据附加到输出列?

amazon-web-services - 如何获取 AWS EMR 集群中某个步骤的状态?

python - 具有 sigmoid 激活的多层感知器在 sin(2x) 回归上生成直线