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

Posted

技术标签:

【中文标题】Spark:在流式查询中使用事件时间滑动窗口时出现问题【英文标题】:Spark: Issue while using event-time sliding window in streaming query 【发布时间】:2017-05-23 06:29:23 【问题描述】:

我正在 Spark 2.2 中进行实时数据流传输。根据我的问题陈述,我想在 120 秒的滑动窗口内查询数据。期间。我每 1 秒触发一次streamingquery。因此,理想情况下,查询应该只运行前 120 秒。数据(更新/新数据)。

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

这背后的原因可能是什么?以及如何仅将窗口应用于新数据(未处理)?

【问题讨论】:

请提供您的代码。很难猜测问题的原因。 【参考方案1】:

使用 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

【讨论】:

以上是关于Spark:在流式查询中使用事件时间滑动窗口时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

在apache spark上执行sql查询时出现arrayindexoutofbound异常

在 Apache Hadoop 上运行具有本地性质的 Spark 查询时出现数据局部性问题

附加模式下的 Spark 结构化流,每个时间窗口输出多行

如何在流式查询中使用外部数据库(postgresql)作为输入?

如何在不中断流式传输作业的情况下更改 spark spark 流式事件中的 json 架构?

2021年大数据Spark(五十二):Structured Streaming 事件时间窗口分析