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 中缓存/持久化数据集