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

是否可以获得给定键的上一个窗口的状态

谈桐
2023-03-14

我有一个相当简单的管道(代码比文字更好):

events
 .apply("SessionWindow", Window.
          <KV<String, Event>>into(Sessions.withGapDuration(gapSession)
          .triggering(<early and late data trigger>))
 .apply("GroupByKey", GroupByKey.create())
 .apply("ComputeState", ParDo.of(new StatefulFn()))

我的问题是,对于给定的窗口,我必须根据以下内容计算新的状态:

  1. 上一个状态(即上一个窗口的计算状态)
  2. 接收的事件

我希望避免调用外部服务来获取上一个状态,而是获取上一个窗口的状态。有可能吗?

共有1个答案

尉迟墨竹
2023-03-14

在Apache中,Beam状态的作用域始终是每个窗口(也请参见此答案)。所以我只能想到重新窗口到全局窗口中,并在那里处理状态。在这个全局statefulfn中,您可以存储和处理先前的状态。

然后它看起来是这样的:

events
 .apply("SessionWindow", Window.
          <KV<String, Event>>into(Sessions.withGapDuration(gapSession)
          .triggering(<early and late data trigger>))
 .apply("GroupByKey", GroupByKey.create())
 .apply("Re-window into Global Window", Window.
          <KV<String, Event>>into(new GlobalWindows())
          .triggering(<early and late data trigger>))
 .apply("ComputeState", ParDo.of(new StatefulFn()))

还请注意,到目前为止,Apache Beam还不支持用于合并窗口的有状态处理(请参见此问题)。因此,当触发器发出会话窗口的早期或晚期结果时,基于会话窗口的statefulfn将无法正常工作,因为状态没有合并。这是使用全局窗口这样的非合并窗口的另一个原因。

 类似资料:
  • 我有一个数据流,有不同的字段,我想通过键来进行聚合计算(计数、平均、..) -字段1上键控的流 -字段2上键控的流

  • 例如,我有一个数组,元素如下 我怎么能得到下一个键从给定的键,如果我使用一些功能,如 如果是的话 是可以做到的,我知道php中的Next(),当前(),prev(),但是我不知道如何使用默认函数实现我需要的结果。请帮助我。

  • 问题内容: C#核心库中是否内置可以为我提供不可变字典的内容? 类似于 Java的 东西: 只是为了澄清一下,我并不是要阻止键/值本身被更改,而只是希望字典的结构不会停止更改。如果将IDictionary的任何mutator方法称为(),我都会希望它们快速而响亮地失败。 问题答案: 不,但是包装器很简单: 显然,如果要允许修改值,可以更改上面的this []设置器。

  • 问题内容: 假设我有一个数组数组 我想将其解析为对象。当我用 它似乎不起作用,我通过使用进行了工作 有一个更好的方法吗? 问题答案: 是的,请使用。 将允许你指定你真正想要的泛型类型,这有助于GSON找到类型来使用反序列化过程。 它使用这种宝石:。它是匿名类的事实使它成为的子类。相当于一个类 该方法的规范指出 如果超类是参数化类型,则返回的对象必须准确反映源代码中使用的实际类型参数。 如果指定 返

  • 问题内容: 使用jdk1.6.0_26我似乎能够对JFrame应用半透明,但对于jre7则不是这样: NativeException:java.awt.IllegalComponentStateException:装饰框架 ex(jruby脚本编写Java,但jdk1.6不适用于jdk7): 所以我的问题是“ jdk7中是否可以有一个半透明的标题栏”(我希望创建的透明窗口可拖动/可调整大小) 问题

  • 我在API文档或其他地方找不到这个问题的答案。我在文档中看到,您可以获得文件的下载URL,但它将其称为“短期URL”。这是什么意思? 我需要上传图像并获取该图像的永久URL,该URL是可以嵌入电子邮件或web文档等的直接URL。这是否可能? 谢谢