我有一個Spark流工作,其目標是:如何在火花傳輸作業期間更新ML模型而無需重新啓動應用程序?
- 使用預訓練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所以不可能)
任何想法?
非常感謝!
您使用哪種ML算法? Spark中有幾種面向流的算法。我猜你已經排除了這些,但是爲了以防萬一。 – ImDarrenG
嗨,目前我們正在考慮使用Word2Vec來構建功能。我們還沒有選擇模型,它必須是靈活的。 –
在這種情況下,我會使用Flask構建一個REST API,它會公開調用train,更新並預測您通過來自'predict(預處理的RDD)'函數的HTTP請求調用。這樣的解耦將爲您提供更大的靈活性,包括您選擇的模型,更新頻率,存儲位置以及升級模型和流式作業代碼的方式。 – ImDarrenG