2017-01-10 74 views
1

我有一個流式管道,它使用帶時間戳標記的事件。我想要做的就是將它們批處理爲1分鐘的固定窗口,然後將窗口中的所有事件寫入單個GCS文件。我可以使用FixedWindows,除了從文檔中,我可以看到我需要一個GroupByCombine操作來應用窗口,但對於我的用例,Windowing已經完成了我需要的所有分組。我看到這個兩個可能的解決方案,這兩個我不知道是理想在沒有GroupBy的情況下對數據使用FixedWindows

  • 推動這些項目到一個單一的GlobalWindow和重複應用1分鐘觸發,丟棄解僱窗格。我還沒有嘗試過這一點,我不知道這是否會工作沒有一個組
  • FixedWindow之後運行全球Combine - 我不確定這是否仍然會考慮windows。

    這些是正確的選擇還是有更好的辦法?

感謝

回答

1

首先,我要解決你的目標:這聽起來像你想組的所有值在一個特定的窗口。爲此,您將需要一個GroupByKeyCombine(進行分組或彙總,而不是真的與窗口有關)。

全球Combine將考慮這個窗口。考慮Dataflow轉換的最佳方式是它們都在的窗口內主要運行

我也想對你的信息的一些其他方面發表意見:

  • 實際上,對於非合併的窗前,彷彿FixedWindows窗口將立即在Window.into(FixedWindow.of(Duration.standardMinutes(1)))變換應用。
  • AfterProcessingTime.pastFirstElementInPane(Duration.standardMinutes(1))這樣的觸發器不會做你想做的事 - 它代表一個近似超時。在每個按鍵的基礎上,在第一個元素到達後​​的一分鐘本地時間之後的某個合理時刻,任何被緩衝的內容都將被髮射。它不會對應於一分鐘的事件時間,或任何特定的事件時間或到達時間窗口。
相關問題