Flink==》window窗口简单练习
数据
sensors2,1,1650866635 sensors2,2,1650866636 sensors2,3,1650866633 sensors2,4,1650866641 sensors2,5,1650866642 sensors4,6,1650866634 sensors4,7,1650866637 sensors4,8,1650866638 sensors4,9,1650866640 sensors4,10,1650866643
代码
package F25 import org.apache.flink.streaming.api.scala._ import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows import org.apache.flink.streaming.api.windowing.time.Time import org.apache.flink.streaming.api.windowing.windows.TimeWindow object Test { def main(args: Array[String]): Unit = { //创建Flink环境 val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment //设置并行度 env.setParallelism(1) //接收nc端数据 val value: DataStream[String] = env.socketTextStream("hdp1", 9999) //切分数据 val value1: DataStream[(String, Int, String)] = value.map(i => { val strings: Array[String] = i.split(",") (strings(0), strings(1).toInt, strings(2)) }) //2、编写Flink流处理程序读入上述数据。(10分) //3、正确使用窗口。(10分) //4、正确设置时间。(10分) //5、统计每5秒传感器温度总和。(使用系统时间)(20分)
//windowAll 计算所有数据 val value2: AllWindowedStream[(String, Int, String), TimeWindow] = value1.windowAll(TumblingProcessingTimeWindows.of(Time.seconds(5))) //总和 value2.sum(1).print("每五秒传感器温度总和:") //6、统计每个传感器每5秒温度总和。(20分)
//window value1.keyBy(_._1).window(TumblingProcessingTimeWindows.of(Time.seconds(5))).sum(1).print("统计每个传感器每五秒温度总和:") //7、统计每个传感器每5条数据的温度总和。(20分)
//countWindow 计数窗口 达到数量为一个窗口
value1.keyBy(_._1).countWindow(5).sum(1).print("每个传感器每五条数据的总和:") env.execute() } }
在Linux使用nc -lk 9999 进行数据发送
我有一杯酒,足以慰风尘。