flink 滚动窗口、滑动窗口、会话窗口、全局窗口

本文介绍了数据流处理中的四种窗口类型:滚动窗口、滑动窗口、会话窗口和全局窗口。滚动窗口是固定大小且无重叠的数据切片;滑动窗口在保持固定大小的同时允许窗口间有重叠,通过滑动步长调整计算频率;会话窗口基于数据到达的时间间隔,当数据间隔超过设定阈值时窗口关闭;全局窗口则包含所有数据,适用于无界流处理,通常需要自定义触发器来执行计算。

前言

  根据分配数据的规则,窗口的具体实现可以分为 4 类:滚动窗口(Tumbling Window)、滑动窗口(Sliding Window)、会话窗口(Session Window),以及全局窗口(Global Window)


1. 滚动窗口(Tumbling Windows)

  滚动窗口有固定的大小,是一种对数据进行均匀切片的划分方式。窗口之间没有重叠,也不会有间隔,是“首尾相接”的状态。滚动窗口可以基于时间定义,也可以基于数据个数定义;需要的参数只有一个,就是窗口的大小(window size)。
在这里插入图片描述


2. 滑动窗口(Sliding Windows)

  与滚动窗口类似,滑动窗口的大小也是固定的。区别在于,窗口之间并不是首尾相接的,而是可以“错开”一定的位置。如果看作一个窗口的运动,那么就像是向前小步“滑动”一样。定义滑动窗口的参数有两个:除去窗口大小(window size)之外,还有一个滑动步长(window slide),代表窗口计算的频率。
在这里插入图片描述

  滑动窗口其实是固定大小窗口的更广义的一种形式;换句话说,滚动窗口也可以看作是一种特殊的滑动窗口——窗口大小等于滑动步长(size = slide)


3. 会话窗口(Session Windows)

### 滑动窗口算法概念 滑动窗口算法是一种用于处理字符串数组问题的有效技术。该方法的核心在于维持一个可变大小的“窗口”,这个窗口可以在遍历过程中沿数据结构移动,从而减少不必要的重复计算并提高效率[^2]。 ### 滑动窗口算法的应用场景 此算法特别适用于那些涉及连续子序列或子串的问题,在这些情况下能够极大地简化求解过程,并且可以用来寻找满足特定条件的最大/最小长度子区间等问题[^3]。 ### Python 实现示例:查找最长不含重复字符的子串 下面是一个具体的例子来说明如何利用Python实现滑动窗口算法: ```python def length_of_longest_substring(s: str) -> int: char_map = {} left = 0 max_length = 0 for right in range(len(s)): if s[right] in char_map: left = max(char_map[s[right]], left) max_length = max(max_length, right - left + 1) char_map[s[right]] = right + 1 return max_length ``` 上述代码实现了在一个给定字符串 `s` 中找到不含有任何重复字符的最小子串长度的功能。这里使用了一个字典 `char_map` 来记录每个字符最后出现的位置;两个指针分别表示当前考虑范围(即所谓的“窗口”)两端位置——左端点 `left` 右端点 `right` 。随着迭代推进,当遇到已经存在于映射表内的字符时,则更新左侧边界至之前相同字符之后一位处,以此确保新加入元素不会造成冲突。最终返回最大无重叠区间的宽度作为结果值。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

但行益事莫问前程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值