基于计数的滚动和滑动窗口案例
基于计数的滚动窗口:当满足一定的数据条数,则触发窗口计算,并关闭这个窗口,开启一个新的窗口,和时间无关。比如:.countWindow(3),即每3条数据触发窗口计算
基于计数的滑动窗口:根据滑动时间隔进行窗口触发,计算窗口长度条数据,和时间无关。比如:.countWindow(3,2) , 即每2条数据触发,然后计算3条数据。
注意 触发窗口计算之后 是关闭这个窗口 开启下一个新的窗口
package 复习
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.api.scala._
// 基于计数滚动窗口和滑动窗口案例
/**
*Tumbling Windows 滚动窗口,基于数据条数来触发窗口处理
*滚动计数窗口或滑动窗口输入数据:
2022-5-18 beijing 2
2022-5-18 beijing 3
2022-5-18 shanghai 6
2022-5-18 beijing 5
2022-5-18 beijing 7
*/
object DataStream_CountWindows {
def main(args: Array[String]): Unit = {
val env = StreamExecutionEnvironment.getExecutionEnvironment
val ds = env.socketTextStream("localhost", 6666)
.map(x => {
val fields: Array[String] = x.split(" ")
val date = fields(0).trim
val province = fields(1)
val ts = fields(2).trim.toInt
(date + "_" + province, ts)
}).keyBy(_._1)
// .countWindow(3) // 滚动窗口
.countWindow(3,2) // 滑动窗口
.reduce((x,y)=>(x._1,x._2+y._2))
.print()
env.execute("test 07")
}
}