滑动事件时间窗口上的聚合对于结构化流而言非常简单,并且与分组聚合非常相似。在分组聚合中,用户指定的分组列中为每个唯一值维护聚合值(例如,计数)。在基于窗口的聚合的情况下,行事件时间所属的每个窗口都会维护聚合值。
流现在包含行以及生成行的时间。而不是运行字数统计,我们希望在10分钟的窗口内对字数进行计数,每5分钟更新一次。也就是说,在10分钟窗口12:00-12:10、12:05-12:15、12:10-12:20等之间接收的单词中的单词计数。请注意,12:00-12:10表示数据12:00之后但12:10之前到达。现在,考虑在12:07收到的单词。此字应增加对应于两个窗口12:00-12:10和12:05-12:15的计数。因此,计数将通过分组键(即单词)和窗口(可以从事件时间计算)来索引。
结果表如下所示:
窗口化类似于分组,因此在代码中,可以使用groupBy()和window()操作来表示窗口化聚合。代码如下: