在 Apache Beam 中使用滑动 window 方法从无限流中删除重复事件

Remove duplicate events from unbounded stream using sliding window approach in Apache Beam

我正在尝试从无限数据流中删除重复事件。我尝试使用滑动 windows(60 秒 window,周期为 30 秒)以及按唯一键对事件进行分组,但它似乎不起作用,因为属于多个 windows 的事件被发出多次 (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 来实现我的目标。但是,使用 FixedWindows 可能会错过一些重复事件。因此,我试图弄清楚如何使用 SlidingWindows(可能通过操作或类似的方式使用额外的组)。

我想知道是否有人对如何使用 SlidingWindows.

删除重复事件有任何想法

SlidingWindows 并不是真正进行重复数据删除的好方法,这正是您发现的原因:SlidingWindows 的规范是每个 window 元素所在的位置得到一个输出。

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