0
我需要將無限的鍵值元素的PCollection摺疊到每個鍵集合(在每個輸入應用後輸出集合)。重要的是將值按正確的順序進行摺疊,並且它不像自定義組合器所支持的那樣。每個密鑰的吞吐量將會很低,但整體吞吐量會非常高。有沒有辦法讓我在Dataflow中做到這一點?將元素摺疊爲值
我需要將無限的鍵值元素的PCollection摺疊到每個鍵集合(在每個輸入應用後輸出集合)。重要的是將值按正確的順序進行摺疊,並且它不像自定義組合器所支持的那樣。每個密鑰的吞吐量將會很低,但整體吞吐量會非常高。有沒有辦法讓我在Dataflow中做到這一點?將元素摺疊爲值
正確,合成器是無序的。這是因爲無序組合在Beam模型中有很大的意義,它允許後期數據(在你的情況下,你希望什麼樣的行爲,以防遲到的數據到達?),並且因爲它承認非常有效的實現,並且在大多數情況下,這是所有需要的。你可以解決這個問題對於你的情況
的一種方式,犧牲一些效率,是實現自定義CombineFn,其中:
基本上你將使用聯合維護每個鍵值的排序列表,你會得到一個PCollection<KV<K, List<V>>>
,到可以應用ParDo
與貴了一倍。
聽起來好像會起作用,但隨着時間的推移,這個州會不斷增長 - 我希望有一個解決方案,我只需要保持聚集狀態。 –
我認爲對於我的用例,可以按照處理時間順序應用事件 - 所以我不必遲到,因爲遲到事件只會在接收時打開的窗口中進行,對嗎? –
因此:鑑於即將推出的國家API(BTW即將推出?:-D),我將能夠擁有一個ParDo,它可以將每個鍵的當前狀態保留在全局窗口中,並且只需在事件進入時應用......除非那裏也沒有訂購,在這種情況下,我必須(我認爲)1)根據處理時間保留固定的時間窗口; 2)GroupByKey; 3)進入一個新的全球窗口;和4)ParDo排序並應用事件。我認爲。 –