即,如果我的窗户是
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"是一个相当复杂的逻辑,需要查看当时主题存在的所有数据。
显然,一个选项就是重新发布每个事件的所有状态。但这会增加数据量。
答案 0 :(得分:1)
不,Iterable<V>
返回的PCollection<KV<K, Iterable<V>>>
中的GroupByKey
没有订购保证。
你能详细说明你想要实现的目标以及为什么需要订购吗?我们发现,几乎所有人都需要在GBK中进行排序的情况下,还有另一种方法来实现他们的目标。