我正在 Spark 2.2 中进行实时数据流传输。根据我的问题陈述,我想在 120 秒的滑动窗口内查询数据。期间。我streamingquery
每 1 秒触发一次。因此,理想情况下,查询应该只运行前 120 秒。数据(更新/新数据)。
但是当我运行查询时,它运行在 120 秒之前的整个数据上。(旧)数据。这意味着窗口在已经处理的数据上滑动。
这背后的原因可能是什么?以及如何仅将窗口应用于新数据(未处理)?
我正在 Spark 2.2 中进行实时数据流传输。根据我的问题陈述,我想在 120 秒的滑动窗口内查询数据。期间。我streamingquery
每 1 秒触发一次。因此,理想情况下,查询应该只运行前 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