基于元素值

时间:2017-03-26 22:22:54

标签: google-cloud-dataflow apache-beam

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

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

编辑:Trigger.OnElementContext.forTrigger(ExecutableTrigger触发器)似乎很有希望,但目前ExecutableTrigger文档相当渺茫。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

目前,遗憾的是,无法触发元素的内容。来自Apache Beam Docs

  

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

目前有一个open ticket用于更强大的数据驱动程序触发器。然而(再次,目前),梁团队似乎一次一个地填充数据驱动触发器的用例(即元素计数或时间戳),而不是添加基于广泛的支持来触发任意值在一个元素内。

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