使用Python SDK合并多个流

时间:2018-08-10 03:39:42

标签: google-cloud-dataflow apache-beam

我想在一个公共键上加入多个流,并在所有流都贡献了至少一个元素时或在窗口结束时触发结果。 CoGroupByKey似乎是适当的构建块,但是似乎没有一种表达早期触发条件的方法(每个输入集合应用计数触发)?

2 个答案:

答案 0 :(得分:2)

我相信CoGroupByKey在幕后被实现为Flatten + GroupByKey。一旦将多个流分解为一个流,数据驱动触发器(或任何其他触发器)将没有足够的控制来实现所需的功能。

您可以使用CoGroupByKeyFlatten来填充每个键的StatefulDoFn支持的对象,而不使用State。同样在这种情况下,StatefulDoFn将有机会决定在流A有2个元素到达但流B还没有任何元素时做什么。

答案 1 :(得分:2)

想到的另一种潜在解决方案是(无状态)DoFn,该DoFn过滤CoGBK结果以删除每个加入的流中至少没有出现一次的结果。对于窗口结果的结束(没有相同的限制),则必须具有并行的CoGBK,并且其结果不会通过过滤器。我不认为有一种方法可以用触发它的结果来标记结果?