当前位置: 首页 > 知识库问答 >
问题:

如何在apache beam/dataflow中消除重叠滑动窗口

赖翰
2023-03-14

我有以下要求:

  • 从酒吧子主题读取事件
  • 取一个持续时间为30分钟、周期为1分钟的窗口
  • 在该窗口中,如果给定id的3个事件都匹配某个谓词,那么我需要在不同的pub子主题中引发一个事件
  • 应该在第3个事件进入分组id时立即引发该事件,因为这是为了检测欺诈行为。在一个窗格中,有许多ID,其中有3个事件与我的谓词匹配,所以我可能需要在每个窗格中发出多个事件
  1. 由于滑动窗口重叠,输出PCollection包含重复项。我明白这是滑动窗口的预期行为,但我如何避免这种情况,同时保持在相同的数据流管道中。我意识到我可以在外部系统中删除,但这只会增加我的系统的复杂性。
  2. 我还需要编写某种触发器,每次在窗口中达到我的条件时都会触发
  3. 数据流是否适合这种类型的实时检测方案

多谢

共有1个答案

咸昊昊
2023-03-14
  1. 可以将输出pcollection重新窗口到全局窗口中(使用常规的window.into()),并使用groupbykey.
  2. 听起来好像已经将感兴趣的事件作为pcollection返回。为了“为每个事件做一些事情”,您所需要的只是应用于此集合的pardo.of(无论您想要什么操作)。触发器还做其他事情:它们控制当groupbykey 中的特定键k出现新值v时会发生什么:是删除该值,还是缓冲该值,或者传递缓冲的kv 以便下游处理。
  3. 是:)
 类似资料:
  • 实现滑动窗口我写了这样的: 执行此代码将打印: 我正在尝试修改,以便每个窗口之间没有重叠,这样大小为3的滑动窗口将返回: 我想我需要修改<code>start</code>,使其指向下一个窗口,但我不确定如何使用流来实现这一点。

  • 我在 Java 中有以下场景: 1生产者线程将事件对象存储到队列中。阻塞它不是一个选项。它应该始终将每个元素存储在队列的末尾并退出(因此没有有界队列)。 1个消费者线程等待队列中有WINDOW_SIZE数量的事件。然后它应该从队列中检索所有WINDOW_SIZE事件进行处理,但只删除其中的一半(即WINDOW_SIZE/2),重叠率为50%。 我的问题是,您将使用哪个(并发)集合来高效地实现这一点

  • 我有一个批次处理作业在数据流运行在gcp下版本apache-梁[gcp]==2.19.0的数据流运行。我为作业创建了一个自定义模板。作业正在按预期运行,但我还想添加最大作业持续时间。我在wait_until_finish()方法中找到了持续时间(毫秒)参数,它应该是可用的。问题是:如何让模板化批处理作业在运行时间超过持续时间时自动停止?我不需要保存任何数据,我只希望工作运行时间过长时停止。我已经实

  • 在第一个窗口row_number1到4中,新的秩(新列)将是 在第一个窗口row_number5到8中,新的秩(新列)将是 在第一个窗口中,Row_Number9要Rest,新的秩(新列)将是 但这给了我: 此外,尝试了。rowsbetween(-3,0)但这也给我带来了错误:

  • 问题内容: 我有一个Python / Linux应用程序,它在GTK窗口中显示我需要的信息。为了便于讨论,它的行为应完全像坞站一样- 存在于所有虚拟桌面上,并且最大化的窗口不与之重叠。 第一点很容易,但是我花了几天的时间在显示器上砸头,以求得到第二点- 防止重叠。如果另一个窗口最大化,我的应用程序将不被覆盖。仅将“始终放在顶部”是不够的,因为其他窗口仅位于我的信息栏后面,而不是停在其边缘。 简而言

  • 假设我有一个每1分钟开始的2小时窗口。下一步是应用GroupBy转换。 如果能解释这一点,我将不胜感激。无法真正找到相关信息