如何更新火花而无需重新启动应用程序流工作期间ML模式?(How to update a ML mod

2019-09-28 15:31发布

我有一个Spark流工作,其目标是:

  • 读一批消息
  • 预测变量Y使用预训练ML管道给这些消息

问题是,我希望能够更新由遗嘱执行人所用的模型,无需重新启动应用程序。

简单地说,这里是什么样子:

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所以不可能)

任何想法 ?

非常感谢 !

Answer 1:

我已经解决了两种不同的方式本次发行前:

  • 模型上的TTL
  • 重读每批模型

这两项解决方案,假设你已经定期累积的数据的额外工作培训(例如每天一次)。



Answer 2:

您传递给foreachRDD由驾驶员执行的功能,这只是RDD操作本身由执行人进行,因此你不需要序列化模型 - 假设你使用的是星火ML管道,其在RDD的工作,这据我所知,他们都做。 星火为您处理培训/预测,您不必手动分发。



文章来源: How to update a ML model during a spark streaming job without restarting the application?