[英]flink - folds on keyed windows
我想每隔15秒處理一次折疊數據。 從“外部”看來,窗口似乎在保留該持續時間內的所有數據,然后立即將其全部提交給fold函數。
真相?
如果是這樣,是否有一種方法可以在每次提交新數據時都調用fold函數,然后僅在窗口末尾返回結果 ?
是否可以將其他轉換組合在一起以實現此效果?
您的觀察是正確的,是的。 原因是窗口運算符的當前實現受到一定限制。 從概念上講,窗口運算符中有兩個元素: 窗口緩沖區和窗口函數 。 假設窗口運算符的輸入類型為IN
,輸出類型為OUT
。 現在,窗口緩沖區存儲了IN
類型的元素,並且當需要發射元素時,它會發射IN
類型的元素。 窗口函數將輸入元素IN
的集合作為輸入,並發出OUT
類型的元素( Collection[IN] -> OUT
)。
如果window函數是reduce函數,我們可以在窗口緩沖區內預聚合,因為該窗口的簽名是(IN, IN) -> IN
。 窗口函數基本上僅從它可以發出的窗口緩沖區中獲取一個元素。
如果我們想要有效的折疊,事情會變得稍微復雜一些,因為我們需要窗口緩沖區接收IN
類型的元素,但是發出OUT
類型,並且窗口函數看起來像這樣: OUT -> OUT
。
可以做到,但是現在還沒有實現。 (順便說一句,我為此打開了一個《吉拉問題》: https : //issues.apache.org/jira/browse/FLINK-2991 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.