1

当输入元素在 DoFn 的侧面输出中具有标志值时,有没有办法关闭窗口?例如,指示会话关闭的事件会关闭窗口。

我一直在阅读文档,触发器主要是基于时间的。一个例子会很棒。

编辑: Trigger.OnElementContext.forTrigger(ExecutableTrigger trigger) 似乎很有希望,但 ExecutableTrigger 文档目前还很薄。

4

2 回答 2

2

我不认为这是可用的。现在只有一个数据驱动触发器 elementCountAtLeast。

https://cloud.google.com/dataflow/model/triggers#data-driven-triggers

解决此问题的方法是复制会话窗口函数代码并编写自定义窗口函数。

https://github.com/apache/beam/blob/890bc1a23f493b042f8c2de5c042970ce5ddca96/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/windowing/Sessions.java

简而言之,您一直将元素分配到同一个窗口中,直到您看到终止元素。然后开始创建一个新窗口。

https://github.com/apache/beam/blob/890bc1a23f493b042f8c2de5c042970ce5ddca96/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/windowing/Sessions.java#L60

于 2017-03-27T17:24:30.293 回答
1

不幸的是,目前还没有办法触发元素的内容。来自Apache Beam 文档

Beam 提供了一个数据驱动的触发器,AfterPane.elementCountAtLeast(). 此触发器适用于元素计数;它在当前窗格收集了至少 N 个元素后触发。

目前有一个更强大的数据驱动触发器的开放票。然而(同样,目前),Beam 团队似乎正在为数​​据驱动触发器一次填写一个用例(即元素计数或时间戳),而不是为触发任意值添加广泛的支持在一个元素内。

ExecutableTrigger 包装了一个 Trigger 对象以供执行。请参阅ExecutableTrigger文档。

于 2018-01-05T23:31:26.630 回答