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