spark结构化流如何计算水印

Posted

技术标签:

【中文标题】spark结构化流如何计算水印【英文标题】:How spark structured streaming calculate watermark 【发布时间】:2018-08-03 08:04:39 【问题描述】:

但是,要在几天内运行此查询,系统必须 限制它累积的中间内存状态的数量。这 意味着系统需要知道何时可以删除旧聚合 从内存状态,因为应用程序不会 不再接收该聚合的延迟数据。要启用此功能,在 Spark 2.1,我们引入了水印,它让引擎 自动跟踪数据中的当前事件时间并尝试 相应地清理旧状态。您可以定义一个水印 通过指定事件时间列和关于如何的阈值进行查询 迟到的数据预计是在事件时间方面。对于一个特定的 从时间 T 开始的窗口,引擎将保持状态并允许 更新状态的延迟数据,直到(引擎看到的最大事件时间 - 延迟阈值 > T)。换句话说,阈值内的延迟数据将被聚合,但阈值之后的数据将开始 被丢弃(请参阅本节后面的确切保证)。 让我们通过一个例子来理解这一点。我们可以很容易地定义 如图所示,使用 withWatermark() 在前面的示例中添加水印 下面。

以上内容复制自http://spark.apache.org/docs/latest/structured-streaming-programming-guide.html

从上面的文档描述(For a specific window starting at time T),它是给定窗口的开始时间。

我认为文档有误,应该是给定窗口的结束时间。

【问题讨论】:

【参考方案1】:

我通过查看spark代码确认,文档有误,T是窗口的结束时间

【讨论】:

以上是关于spark结构化流如何计算水印的主要内容,如果未能解决你的问题,请参考以下文章

Spark 结构化流 - 带有水印替代解决方案的 dropDuplicates

我们如何在 Spark 结构化流 2.4.4 中缓存/持久化数据集

Spark SQL DSL 中的窗口(固定、滑动等)和水印支持

[Spark]-结构化流之初始篇

无法使用火花结构化流计算文档

与 deviceid 对应的 Spark 结构化流式水印