在 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 的版本编写自己的转换来做同样的事情。
我正在尝试从无限数据流中删除重复事件。我尝试使用滑动 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 的版本编写自己的转换来做同样的事情。