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 进行数据发送

 

 

posted @ 2022-04-26 11:43  御本美琴初号机  阅读(35)  评论(0)    收藏  举报