首页 > 解决方案 > 了解 Spark 结构化流中的“附加”模式:如何删除旧数据?

问题描述

假设我想运行一个流式作业,它每 x 秒获取一次新数据,并为每个触发器输出新行而不进行任何聚合。例如:

val query = wordCounts.writeStream
.outputMode("append")
.trigger(Trigger.ProcessingTime("15 seconds"))
.format("console")
.start()

在 Spark 文档中,我看到以下内容:

“对输入的查询将生成“结果表”。每个触发间隔(例如,每 1 秒),新行都会附加到输入表,最终更新结果表。每当结果表更新时,我们会想要将更改的结果行写入外部接收器。”

“追加模式 - 只有自上次触发后追加在结果表中的新行才会写入外部存储。这仅适用于结果表中的现有行预计不会更改的查询。”

我知道在追加模式下,只有新行被写入控制台,但是“结果表”仍然会有来自以前触发器的历史行,对吗?所以,这个表的大小可能会在很长一段时间内增加。有没有办法从结果表中删除这些旧行,因为它们不需要并且不会更改?

我看到了窗口+水印功能,但这主要用于聚合查询,对吗?

标签: apache-sparkspark-streaming

解决方案


推荐阅读