Spark:在流式处理查询中使用事件时间滑动窗口时出现问题



我正在Spark 2.2中进行实时数据流处理。根据我的问题陈述,我想在 120 秒持续时间的滑动窗口中查询数据。我每 1 秒触发一次streamingquery。因此,理想情况下,查询应仅运行一个前 120 秒的数据(更新/新鲜数据(。

但是当我运行查询时,它正在运行在 120 秒(旧(数据之前的整个数据上。这意味着窗口正在已处理的数据上滑动。

这背后的原因可能是什么? 我怎样才能只在新鲜数据(未处理(上应用窗口?

使用 Spark 2.2 和结构化流式处理,您可以在执行聚合的事件时间列上指定水印,Scala 代码应如下所示,用于每秒滑动的 120 秒滑动窗口:

query
 .withWatermark("event-time-column", "120 second")
 .groupBy("event-time-column", "120 second", "1 second")

因此,将删除超过 120 秒的数据中的所有数据和聚合状态,仅处理新数据

完整文档在这里:https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html

最新更新