我有一份 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/