代码之家  ›  专栏  ›  技术社区  ›  David_Zizu

在Apache Beam中使用滑动窗口方法从无界流中删除重复事件

  •  0
  • David_Zizu  · 技术社区  · 4 年前

    我正试图从无限数据流中删除重复事件。我尝试使用滑动窗口(60秒窗口,30秒周期)以及按唯一键对事件进行分组,但似乎不起作用,因为属于多个窗口的事件会多次发出( more details ).

    我有以下代码:

    (
        elements
        | "Convert To Tuple" >> Map(lambda element: (element.id, element))
        | "Window" >> WindowInto(SlidingWindows(60, 30), trigger=AfterCount(1), accumulation_mode=AccumulationMode.DISCARDING)
        | "Group" >> GroupByKey()
        | "Process" >> ParDo(MyCustomFn())
    

    我知道我可以用 FixedWindows 为了实现我的目标。但是,可能会错过一些重复的事件 绘制固定窗 因此,我试图弄清楚如何使用 SlidingWindows (可能通过操作或类似方式使用额外的组)。

    我想知道是否有人对如何使用以下方法消除重复事件有任何想法 滑动窗户 .

    0 回复  |  直到 4 年前
        1
  •  3
  •   danielm    4 年前

    SlidingWindows并不是进行重复数据删除的好方法,原因正是你所发现的:SlidingWindows的规范是,元素所在的每个窗口都有一个输出。

    在Java中,您可以使用 Deduplicate 转换以做到这一点。它允许您配置在多大程度上回溯时间(处理时间或事件时间)以查找重复值。在Python中,这还不存在,尽管你可以根据Java的版本编写自己的转换来做同样的事情。

    推荐文章