水印是基于处理时间或事件时间还是两者兼而有之?

时间:2017-09-04 07:11:41

标签: apache-spark spark-structured-streaming

结构化流中的水印是否始终使用处理时间或事件时间或两者设置?

1 个答案:

答案 0 :(得分:3)

在结构化流媒体中2.2根据Dataset.withWatermark运算符中eventTime列定义的事件时间跟踪流水印。

  

withWatermark 为此数据集定义事件时间水印。水印跟踪一个时间点,在此之前我们假设不再有后期数据到达。

默认情况下,它会为您提供事件时间水印。

但是您的初始数据集最初可能没有事件时间列,因此您可以在处理时使用current_datecurrent_timestamp函数或其他方式自动生成一个。这将为您提供处理时间水印(基于自定义生成的列)。

在使用KeyValueGroupedDataset.flatMapGroupsWithState的最通用解决方案中,您可以预先定义策略或编写自定义策略。这就是为什么他们称之为Arbitrary Stateful Aggregations in Structured Streaming的解决方案。

  

flatMapGroupsWithState 将给定函数应用于每组数据,同时保持用户定义的每组状态。