如何在 Spark Streaming 中仅在新批次上重新训练模型(不采用以前的训练数据集)?
Posted
技术标签:
【中文标题】如何在 Spark Streaming 中仅在新批次上重新训练模型(不采用以前的训练数据集)?【英文标题】:How to re-train models on new batches only (without taking the previous training dataset) in Spark Streaming? 【发布时间】:2016-11-25 09:46:47 【问题描述】:我正在尝试编写我的第一个推荐模型(Spark 2.0.2),我想知道是否可能, 在模型详细说明我的所有 rdd 的初始训练之后,只为未来的训练使用 delta。
让我通过一个例子来解释:
-
第一批执行第一次训练,所有 rdd (200000
元素),系统启动时。
在训练结束时保存模型。
第二个批处理应用程序(火花流)加载模型
之前保存并在 kinesis 队列上收听。
当新元素到达时,第二批应该执行
训练(在增量模式下?!)不加载所有 200000 个元素
之前,但只有模型和一个新元素。
在训练结束时保存更新的模型。
问题是,是否有可能以某种方式执行第 4 步?
【问题讨论】:
【参考方案1】:我的理解是,只有设计用于支持流式训练的机器学习算法才能实现,例如 StreamingKMeans 或 StreamingLogisticRegressionWithSGD。
引用他们的文档(参见上面的有效参考):
(StreamingLogisticRegressionWithSGD) 训练或预测流数据的逻辑回归模型。训练使用随机梯度下降来根据来自 DStream 的每批新传入数据更新模型(有关模型方程,请参阅 LogisticRegressionWithSGD)
StreamingKMeans 提供了配置流式 k-means 分析、在流式上训练模型以及使用模型对流式数据进行预测的方法。
让我担心算法的是它们属于 org.apache.spark.mllib.clustering
包,现在已弃用(因为它是基于 RDD 而不是基于 DataFrame)。我不知道他们是否有他们的 JIRA 来使用 DataFrame 对其进行改造。
【讨论】:
好的,谢谢,有没有像 spark 这样的工具可以让我的应用程序有这种行为? @kipliko 也许是 Flink 或以流为中心的支持 ML 的东西。还没有探索过这个地区。 @JacekLaskowski slideshare.net/hkarau/… 159.203.217.164/extend-structured-streaming-for-spark-ml 可能还有一个,但我现在找不到。以上是关于如何在 Spark Streaming 中仅在新批次上重新训练模型(不采用以前的训练数据集)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift iOS 中仅在最后一个屏幕上获取导航栏?
如何在最新的 iOS 14 中仅在 swiftui 中舍入滚动视图的顶角