0
我需要将无限的键值元素的PCollection折叠到每个键集合(在每个输入应用后输出集合)。重要的是将值按正确的顺序进行折叠,并且它不像自定义组合器所支持的那样。每个密钥的吞吐量将会很低,但整体吞吐量会非常高。有没有办法让我在Dataflow中做到这一点?将元素折叠为值
我需要将无限的键值元素的PCollection折叠到每个键集合(在每个输入应用后输出集合)。重要的是将值按正确的顺序进行折叠,并且它不像自定义组合器所支持的那样。每个密钥的吞吐量将会很低,但整体吞吐量会非常高。有没有办法让我在Dataflow中做到这一点?将元素折叠为值
正确,合成器是无序的。这是因为无序组合在Beam模型中有很大的意义,它允许后期数据(在你的情况下,你希望什么样的行为,以防迟到的数据到达?),并且因为它承认非常有效的实现,并且在大多数情况下,这是所有需要的。你可以解决这个问题对于你的情况
的一种方式,牺牲一些效率,是实现自定义CombineFn,其中:
基本上你将使用联合维护每个键值的排序列表,你会得到一个PCollection<KV<K, List<V>>>
,到可以应用ParDo
与贵了一倍。
听起来好像会起作用,但随着时间的推移,这个州会不断增长 - 我希望有一个解决方案,我只需要保持聚集状态。 –
我认为对于我的用例,可以按照处理时间顺序应用事件 - 所以我不必迟到,因为迟到事件只会在接收时打开的窗口中进行,对吗? –
因此:鉴于即将推出的国家API(BTW即将推出?:-D),我将能够拥有一个ParDo,它可以将每个键的当前状态保留在全局窗口中,并且只需在事件进入时应用......除非那里也没有订购,在这种情况下,我必须(我认为)1)根据处理时间保留固定的时间窗口; 2)GroupByKey; 3)进入一个新的全球窗口;和4)ParDo排序并应用事件。我认为。 –