是否通过GroupByKey创建了Iterable

时间:2016-02-10 20:08:12

标签: google-cloud-dataflow

即,如果我的窗户是 Window.into(new GlobalWindows()) .triggering(Repeatedly.forever(AfterPane.elementCountAtLeast(0))) .accumulatingFiredPanes();

按键分组后,每次新元素进入该键的窗口时,管道中的下一步都会收到一个Iterable,我可以可靠地说该Iterable的最后一个或第一个元素是进入窗口的元素?

我们有一系列论坛评论,可能会出现故障,我们希望每次发表评论时都会列出主题评论数量的列表。如果我们有评论迟到,我们需要重新发布我们之前发布的关于此评论的主题的所有状态,因为它们的数字现在已经过了一个。

即输入: topic_id, event_time 1, 1 1, 2 1, 3 1, 4 1, 0 // out of order 1, 5

输出: topic_id, state_time, num_comments 1, 1, 1 // in order, issue states accumulating as they came in 1, 2, 2 1, 3, 3 1, 4, 4 1, 0, 1 // got out of order event, need to reissue everything after it 1, 1, 2 // reissue 1, 2, 3 // reissue 1, 3, 4 // reissue 1, 4, 5 // reissue 1, 5, 5 // back to normal processing

这个例子是设计的,实际上是由" num_comments"是一个相当复杂的逻辑,需要查看当时主题存在的所有数据。

显然,一个选项就是重新发布每个事件的所有状态。但这会增加数据量。

1 个答案:

答案 0 :(得分:1)

不,Iterable<V>返回的PCollection<KV<K, Iterable<V>>>中的GroupByKey没有订购保证。

你能详细说明你想要实现的目标以及为什么需要订购吗?我们发现,几乎所有人都需要在GBK中进行排序的情况下,还有另一种方法来实现他们的目标。