如何在 Spark Streaming 中仅在新批次上重新训练模型(不采用以前的训练数据集)?

How to re-train models on new batches only (without taking the previous training dataset) in Spark Streaming?

我正在尝试编写我的第一个推荐模型 (Spark 2.0.2),我想知道是否可行, 在模型详细说明我所有的 rdd 的初始训练之后,只为未来的训练使用一个增量。

让我通过一个例子来解释:

  1. 第一批执行第一次训练,所有 rdd (200000 元素),当系统启动时。
  2. 在训练结束时模型被保存。
  3. 第二批应用程序(火花流)加载模型 之前保存并监听运动队列。
  4. 当新元素到达时,第二批应该执行 训练(在增量模式下?!)没有负载所有 200000 个元素 之前,但只是模型和一个新元素。
  5. 训练结束时更新的模型被保存。

问题是,是否有可能以某种方式执行第 4 步?

我的理解是,只有设计用于支持流式训练的机器学习算法才有可能,例如 StreamingKMeans or StreamingLogisticRegressionWithSGD

引用他们的文档(参见上面的有效参考):

(StreamingLogisticRegressionWithSGD) 在流数据上训练或预测逻辑回归模型。训练使用随机梯度下降根据来自 DStream 的每批新传入数据更新模型(请参阅模型方程的 LogisticRegressionWithSGD)

StreamingKMeans 提供配置流式 k-均值分析、训练流式模型以及使用模型对流式数据进行预测的方法。

让我担心的是算法属于 org.apache.spark.mllib.clustering 包,现在已弃用(因为它是基于 RDD 而不是基于 DataFrame 的)。我不知道他们是否有他们的 JIRAs 来用 DataFrame 改造它们。