フリンクスライディングウィンドウは、同じトピックの最小値を見つけます

スライディングウィンドウを点滅させる

import org.apache.flink.streaming.api.TimeCharacteristic
import org.apache.flink.streaming.api.functions.timestamps.BoundedOutOfOrdernessTimestampExtractor
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Time


object windowtest {
    
    
  def main(args: Array[String]): Unit = {
    
    
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    env.setParallelism(1)
    //设点时间类型 、还需要在datastream上指定时间戳和watermark
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
    //自动设定200毫秒
    //env.getConfig.setAutoWatermarkInterval(200L)
    val stream = env.socketTextStream("node02", 5515)
    val dataStream = stream.map(data => {
    
    
      val dataArray = data.split(",")
      SensorReading(dataArray(0).trim, dataArray(1).trim.toLong, dataArray(2).trim.toDouble)
    }
    )
      //      .assignAscendingTimestamps(_.timestamp * 1000) //有序的数据
      //            处理乱序数据
      //            自动生成
      .assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor[SensorReading](Time.milliseconds(1000)) {
    
     //3*1000为延迟
      override def extractTimestamp(t: SensorReading): Long = t.timestamp * 1000
    })
    //.assignTimestampsAndWatermarks(new myAssniger())


    val inputDataStream = dataStream.map(data => (data.id, data.temperature))
      .keyBy(0)
      .timeWindow(Time.seconds(10), Time.seconds(1))
      // 用reduce做增量聚合、统计10S中的最小温度
      .reduce((data1, data2) => (data1._1, data1._2.min(data2._2)))
      .map((_, "outetmp"))
    inputDataStream.print()
    stream.print()
    env.execute()

  }

}

//class myAssniger() extends AssignerWithPeriodicWatermarks[SensorReading] {
    
    
//  val bound = 3*1000
//  var maxTs = Long.MinValue
//  override def getCurrentWatermark = new Watermark(maxTs-(bound))
//  override def extractTimestamp(t: SensorReading, l: Long) = {
    
    
//    maxTs = maxTs.max(t.timestamp * 1000)
//    t.timestamp * 1000}
//}
//class myAssniger() extends AssignerWithPunctuatedWatermarks[SensorReading]{
    
    
//  override def checkAndGetNextWatermark(t: SensorReading, l: Long) =new Watermark(l)
//
//  override def extractTimestamp(t: SensorReading, l: Long) = t.timestamp
//}

おすすめ

転載: blog.csdn.net/weixin_44429965/article/details/108012430