(Pyspark train model with spark structured-streaming

(Py-)Spark train model with spark structured-streaming

我正在使用 Spark 3.x,但我不知道如何使用 Spark 结构化流而不是 spark 流来训练模型,例如随机森林分类器。

我已经设置了所需的流来处理训练的微批次,并且我设置了 spark.ml 管道,但我遗漏了一个函数或类似 partial fit

spark基本上是为大数据和分布式ml等做的,必须有这样的方法

训练代码如下所示:

(training_data, test_data) = data.randomSplit([0.7, 0.3])
pipeline = Pipeline(stages=[featureIndexerA, assembler, rf, labelConverter])
model = pipeline.fit(training_data)

这如何与多个微批次一起使用?

事实证明:没有 spark.ml 的原生实现可以逐个训练随机森林。

如果你有一个庞大的数据集,一旦你可以使用 sklearn 就无法输入它 您可以在其中使用数据的不同部分训练两个或多个模型,以及 之后将它们组合起来。但这只是添加了所有的树,这使得你 模型变得非常大(如果使用 3 个森林,每个森林有 20 棵树,结果是一个单一的 60 棵树随机森林)

您可以通过将树添加到估算器列表来手动执行此操作,也可以使用内置功能 warm_start

就准确性而言,它看起来很有前途,因为与一次性训练相比,它的表现大致相同,有时甚至更好。但我只比较了一个用整个数据集训练的 40 个估计器森林与两个用一半数据集训练的 20 个估计器

如果随机森林不是您所需要的,则有一些算法可以处理流,但仅适用于火花流(基于 RDD 的算法)而不是火花结构化流(基于 df 的算法)。这些在文档中标记

无论如何,有一些研究论文使用 spark structured streaming 实现随机森林,但我还没有尝试过其中一篇,因为它看起来很耗时