赞
踩
* Keyed Windows <可以理解为按照原始数据流中的某个key进行分类,拥有同一个key值的数据流将为进入同一个window,多个窗口并行的逻辑流> stream .keyBy(...) <- keyed versus non-keyed windows .window(...) <- required: "assigner" [.trigger(...)] <- optional: "trigger" (else default trigger) [.evictor(...)] <- optional: "evictor" (else no evictor) [.allowedLateness(...)] <- optional: "lateness" (else zero) [.sideOutputLateData(...)] <- optional: "output tag" (else no side output for late data) .reduce/aggregate/fold/apply() <- required: "function" [.getSideOutput(...)] <- optional: "output tag" * Non-Keyed Windows <不做分类,每进入一条数据即增加一个窗口,多个窗口并行,每个窗口处理1条数据> stream .windowAll(...) <- required: "assigner" [.trigger(...)] <- optional: "trigger" (else default trigger) [.evictor(...)] <- optional: "evictor" (else no evictor) [.allowedLateness(...)] <- optional: "lateness" (else zero) [.sideOutputLateData(...)] <- optional: "output tag" (else no side output for late data) .reduce/aggregate/fold/apply() <- required: "function" [.getSideOutput(...)] <- optional: "output tag" 用`[ ]`包含的内容,其中的方法均为可选函数,如需了解可以查阅一下官方文档。
我们可以用.window()来定义一个窗口,然后基于这个window去做一些聚合或者其他的操作。
注意 window必须在KeyBy之后才能使用。
dataStream的开窗方法是.WindiwAll()
Flink提供了更简单的.timeWindow和.countWindow方法,用于定义时间窗口和计数窗口
window方法接收的输入参数是一个WindowAssigner
WindowAssigner负责将每条数据分发到正确的window中
flink提供了通用的WindowAssigner
.timeWindow(Time.seconds(15))
.timeWindow(Time.seconds(15),Time.seconds(5))
.window(EventTimeSessionWindows.withGap(Time.minutes(10)))
.window(GlobalWindows.create())
.countWindow(5)
.countWindow(10,2)
窗口函数是触发器在确认窗口数据到达完毕后,执行的函数。
flink提供了两类窗口函数,
此类为数据计算函数,适用于仅计算,无需做时间窗口的情况。
AggerateFunction为用户自定义函数,可以按照个人需求做各类统计。
此类为做窗口函数,适用于无需计算只做时间窗口统计的情况。(ps.貌似很少有这样的情况)
聚合函数+全窗口函数
两种方式的结合适用于需要进行计算后再做滑动窗口统计结果的情况。
(直接对全部SourceData数据做WindowFunction消耗会较大,所以先做计算,提取出需要的特征、结果后,减轻窗口函数的压力。)
windowFunction
dataStream -> KeyBy -> KeyedStream->window -> windowStream -> 增量聚合/全窗口函数 ->dataStream
dataStream ->WindowAll -> allwindowedStream -> 增量聚合/全窗口函数 ->dataStream
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。