2017-08-01 50 views
0

我正在嘗試實現一個管道並接收數據流,如果分鐘間隔中有任何元素,則每分鐘輸出一個True,如果沒有,則輸出False。如果在該持續時間內沒有元素,窗格(具有永久時間觸發器)或窗口(固定窗口)似乎不會觸發。在Apache Beam中強制傳輸一個空窗格/窗口

我在考慮的一種解決方法是將流放入全局窗口中,使用ValueState保持隊列以累積數據並將計時器作爲檢查隊列的觸發器。我想知道是否有更好的方法來實現這一點。

謝謝。

回答

0

我認爲你的計時器和狀態解決方案是一個很好的方法來做到這一點。但是,請記住,只有當您收到至少一個密鑰元素時,您的計時器纔會被設置。

如果這是一個問題,那麼你可以做的另一件事是注入一個PCollection,以保證每個窗口至少有一個虛擬元素。然後你可以使用ValueState來檢查除了啞元之外的任何元素是否已經到達。或者在窗口上使用Count.PerElement,並檢查該窗口是否有多於一個元素(一個附加元素,它不是虛擬元素)。