0基础学习PyFlink——时间滑动窗口(Sliding Time Windows)

《0基础学习PyFlink------时间滚动窗口(Tumbling Time Windows)》我们介绍了不会有重复数据的时间滚动窗口。本节我们将介绍存在重复计算数据的时间滑动窗口。

关于滑动窗口,可以先看下《0基础学习PyFlink------个数滑动窗口(Sliding Count Windows)》。下图就是个数滑动窗口示意图。

我们看到个数滑动窗口也会因为窗口内数据不够而不被触发。但是时间滑动窗口则可以解决这个问题,我们只要把窗口改成时间类型即可。

相应的代码我们参考《0基础学习PyFlink------时间滚动窗口(Tumbling Time Windows)》,只要把TumblingProcessingTimeWindows改成SlidingProcessingTimeWindows,并增加一个偏移参数(Time.milliseconds(1))即可。这意味着我们将运行一个时间长度为2毫秒,每次递进1毫秒的窗口。

完整代码

python 复制代码
from typing import Iterable
import time
from pyflink.common import Types, Time
from pyflink.datastream import StreamExecutionEnvironment, RuntimeExecutionMode, WindowFunction
from pyflink.datastream.window import  TimeWindow, SlidingProcessingTimeWindows
   
class SumWindowFunction(WindowFunction[tuple, tuple, str, TimeWindow]):
    def apply(self, key: str, window: TimeWindow, inputs: Iterable[tuple]):
        print(*inputs, window)
        return [(key,  len([e for e in inputs]))]


word_count_data = [("A",2),("A",1),("A",4),("A",3),("A",6),("A",5),("A",7),("A",8),("A",9),("A",10),
                   ("A",11),("A",12),("A",13),("A",14),("A",15),("A",16),("A",17),("A",18),("A",19),("A",20)]

def word_count():
    env = StreamExecutionEnvironment.get_execution_environment()
    env.set_runtime_mode(RuntimeExecutionMode.STREAMING)
    # write all the data to one file
    env.set_parallelism(1)

    source_type_info = Types.TUPLE([Types.STRING(), Types.INT()])
    # define the source
    # mappging
    source = env.from_collection(word_count_data, source_type_info)
    # source.print()

    # keying
    keyed=source.key_by(lambda i: i[0]) 
    
    # reducing
    reduced=keyed.window(SlidingProcessingTimeWindows.of(Time.milliseconds(2), Time.milliseconds(1))) \
                    .apply(SumWindowFunction(),
                        Types.TUPLE([Types.STRING(), Types.INT()]))
        
    # # define the sink
    reduced.print()

    # submit for execution
    env.execute()

if __name__ == '__main__':
    word_count()

运行结果

运行两次上述代码,我们发现每次都不同,而且有重叠计算的元素。

('A', 2) ('A', 1) ('A', 4) TimeWindow(start=1698773292650, end=1698773292652)

('A', 2) ('A', 1) ('A', 4) ('A', 3) ('A', 6) ('A', 5) ('A', 7) ('A', 8) ('A', 9) ('A', 10) ('A', 11) TimeWindow(start=1698773292651, end=1698773292653)

(A,3)

(A,11)

('A', 3) ('A', 6) ('A', 5) ('A', 7) ('A', 8) ('A', 9) ('A', 10) ('A', 11) ('A', 12) ('A', 13) ('A', 14) ('A', 15) ('A', 16) ('A', 17) ('A', 18) ('A', 19) ('A', 20) TimeWindow(start=1698773292652, end=1698773292654)

(A,17)

('A', 2) ('A', 1) ('A', 4) TimeWindow(start=1698773319933, end=1698773319935)

('A', 2) ('A', 1) ('A', 4) ('A', 3) ('A', 6) ('A', 5) ('A', 7) ('A', 8) ('A', 9) ('A', 10) ('A', 11) ('A', 12) TimeWindow(start=1698773319934, end=1698773319936)

(A,3)

(A,12)

('A', 3) ('A', 6) ('A', 5) ('A', 7) ('A', 8) ('A', 9) ('A', 10) ('A', 11) ('A', 12) ('A', 13) ('A', 14) ('A', 15) ('A', 16) ('A', 17) ('A', 18) ('A', 19) ('A', 20) TimeWindow(start=1698773319935, end=1698773319937)

(A,17)

参考资料

相关推荐
MXsoft6181 分钟前
破解多校区高校运维困局,协同效率提升60%的智能运维方案
大数据
周周记笔记17 分钟前
学习笔记:Python的起源
开发语言·python
魂尾ac42 分钟前
Django + Vue3 前后端分离技术实现自动化测试平台从零到有系列 <第一章> 之 注册登录实现
后端·python·django·vue
Source.Liu1 小时前
【Pywinauto库】10.7 pywinauto.controls.uia_controls控件
windows·python·自动化
人工干智能1 小时前
建自己的Python项目仓库,使用工具:GitHub(远程仓库)、GitHub Desktop(版本控制工具)、VSCode(代码编辑器)
python·编辑器·github
StarPrayers.1 小时前
PySpark基础知识(python)
python·数据分析·spark
币须赢1 小时前
英伟达Thor芯片套件9月发货 “物理AI”有哪些?
大数据·人工智能
潜龙95272 小时前
第6.2节 Android Agent开发<二>
android·python·覆盖率数据
lily363926046a2 小时前
智联未来 点赋科技
大数据·人工智能
学习中的阿陈2 小时前
Hadoop伪分布式环境配置
大数据·hadoop·分布式