我有一个Spark Streaming工作,其目标是:
问题是,我希望能够更新执行程序使用的模型,而无需重新启动应用程序。
简单地说,这就是它的样子:
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)
在这种情况下,简单地使用模型。没有更新。
我已经考虑了几种可能性,但我现在已经把它们全部划掉了:
有什么想法吗?
非常感谢!
答案 0 :(得分:0)
我之前以两种不同的方式解决了这个问题:
这两种解决方案都假定您定期(例如每天一次)积累的数据进行额外的工作培训。
答案 1 :(得分:-1)
传递给foreachRDD的函数由驱动程序执行,它只是由执行程序执行的rdd操作本身,因此您不需要序列化模型 - 假设您使用的是运行的Spark ML管道RDD,据我所知,他们都这样做。 Spark为您处理培训/预测,您无需手动分发它。