Google cloud dataflow GroupByKey创建的Iterable是否已排序

Google cloud dataflow GroupByKey创建的Iterable是否已排序,google-cloud-dataflow,Google Cloud Dataflow,如果我的窗户是空的 Window.into(新的GlobalWindows()) .触发(重复.forever(AfterPane.ElementCount至少(0))) .积聚燃烧的汽油(); 在我按键分组之后,管道中的下一步在每次新元素进入该键的窗口时都会收到一个Iterable,我能可靠地说该Iterable的最后一个或第一个元素就是进入该窗口的元素吗 我们有一个论坛评论流进来,可能是无序的,我们希望作为一个输出,一个主题的评论数量列表,每次发表评论。如果我们有一个评论来晚了,我们需要

如果我的窗户是空的

Window.into(新的GlobalWindows())
.触发(重复.forever(AfterPane.ElementCount至少(0)))
.积聚燃烧的汽油();

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

我们有一个论坛评论流进来,可能是无序的,我们希望作为一个输出,一个主题的评论数量列表,每次发表评论。如果我们有一个评论来晚了,我们需要重新发布我们之前发布的主题的所有状态,这些状态跟随这个评论,因为它们的数量现在减少了一个

即,输入:

主题id、事件时间
1, 1
1, 2
1, 3
1, 4
1,0//出现故障
1, 5

输出:

主题id、状态时间、数量注释
1,1,1//按顺序,发布状态在进入时累积
1, 2, 2
1, 3, 3
1, 4, 4
1,0,1//发生故障事件,需要在事件发生后重新发布所有内容
1、1、2//重新发行
1、2、3//重新发行
1、3、4//重新发行
1、4、5//重新发行
1、5、5//恢复正常处理

这个例子是人为设计的,实际上,“num_comments”表示的输出是相当复杂的逻辑,需要查看当时某个主题存在的所有数据

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

否,
GroupByKey
返回的
PCollection
中的
Iterable
没有排序保证


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

我相信你是对的。我用一个例子更新了这个问题。我们考虑过的一个选择是每次发射整个窗口,然后再次收集,但这是相当多的状态数据。谢谢。这看起来确实像是一个很好的使用GBK排序选项的用例,但是虽然我们没有它,但最好的办法是读取内存中的Iterable并手动排序。是的,如果我在前面的步骤中将处理时间添加到事件中,我应该能够从中找出需要重新发出的事件。干杯这看起来有点像我在围绕着收回和状态API还没有发布这一事实工作