2017-03-26 20 views
0

当输入元素在DoFn的侧面输出中具有标志值时,是否有办法关闭窗口?例如。表示关闭会话的事件关闭窗口。基于元素值之后的关闭窗口

我一直在阅读文档,触发器大多数时间基于。一个例子会很棒。

编辑:Trigger.OnElementContext.forTrigger(ExecutableTrigger触发器)似乎很有前途,但ExecutableTrigger文档目前非常苗条。

回答

1

我不认为这是可用的。现在只有一个数据驱动触发器,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

0

目前,没有方法来触发关闭一个元素的内容,很遗憾。来自Apache Beam Docs

梁提供了一个数据驱动触发器,AfterPane.elementCountAtLeast()。这个触发器在元素计数上工作;它会在当前窗格收集至少N个元素之后触发。

当前有一个open ticket更强大的数据驱动程序触发器。然而(同样,目前来看),看起来Beam团队正在逐个填写数据驱动触发器的用例(即元素数或时间戳),而不是增加基于广泛的支持来触发任意值在一个元素内。

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