一、窗口概念
将无界流切割为有界流的一种方式,它会将流数据分到有限大小的桶(bucket)中进行分析。
二、窗口类型



.timeWindow(Time.seconds(15))
·滑动时间窗口(sliding time window):
.timeWindow(Time.seconds(15),Time.seconds(5))
·会话窗口(session window):
.window(EventTimeSessionWindows.withGap(Time.minutes(10)))
·滚动计数窗口(tumbling count window):
.countWindow(10)
·滑动计数窗口(sliding count window):
.countWindow(10,2)
val inputStream = env.socketTextStream("localhost", 7777)
val dataStream = inputStream
.map(data => {
val arr = data.split(",")
SensorReading(arr(0), arr(1).toLong, arr(2).toDouble)
})
//每15秒统计一次,窗口内各传感器所有温度的最小值
val resultStream = dataStream
.map(data => (data.id, data.temperature))
.keyBy(data => data._1) //按照二元组的第一个元素id来分组
//.window(TumblingEventTimeWindows.of(Time.seconds(15))) //滚动时间窗口
//.window(SlidingProcessingTimeWindows.of(Time.seconds(15),Time.seconds(3))) //滑动时间窗口
//.window(EventTimeSessionWindows.withGap(Time.seconds(10))) //会话时间窗口
.timeWindow(Time.seconds(15))
//.countWindow(10) //滚动计数窗口
//minBy(1)
.reduce((r1, r2) => (r1._1, r1._2.min(r2._2)))
resultStream.print()
env.execute()
