Flink基础学习(Scala):窗口函数window

文章目录

      • 一、前言
      • 二、窗口类型
        • 2.1 时间窗口(Time Window)
          • 2.1.1 滚动时间窗口
          • 2.1.2 滑动时间窗口
          • 2.1.3 会话窗口
        • 2.2 计数窗口(Count WIndow)
          • 2.2.1 滚动计数窗口
          • 2.2.2 滑动计数窗口
      • 三、总结

一、前言

窗口就是将无限流切割成有限流的一种方式,它会将流数据分发到有限大小的桶中进行分析

二、窗口类型

2.1 时间窗口(Time Window)
2.1.1 滚动时间窗口

所谓滚动窗口就是将数据依据固定的窗口的长度对数据进行切分(注意切分数据段是前闭后开),所以窗口长度固定、没有重叠,其实滑动窗口是一种特殊的滑动窗口。
具体实现代码如下:

import java.time.Duration

import org.apache.flink.api.common.eventtime.{
   SerializableTimestampAssigner, WatermarkStrategy}
import org.apache.flink.api.common.functions.ReduceFunction
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.assigners.{
   EventTimeSessionWindows, SlidingEventTimeWindows, TumblingEventTimeWindows}
import org.apache.flink.streaming.api.windowing.time.Time


case class Sensor1(id: String, temp: Double, time: Long)

object StreamWindow {
   
  def main(args: Array[String]): Unit = {
   
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    env.setParallelism(1)
    // 根据事件时间定义水位线,延迟1秒
    val strategy = WatermarkStrategy.forBoundedOutOfOrderness[Sensor1](Duration.ofSeconds(1))
      .

你可能感兴趣的:(flink,flink,window,时间窗口,计数窗口,水位线)