2017-06-29 48 views
6

想象一下,每個用戶的事件正在流式傳輸的用例,但只有事件的第一週纔有意思。在這段時間內,有狀態邏輯正在使用mapWithState進行。在那段時間之後,用戶傳入的事件應該被忽略。火花流媒體mapWithState超時不刪除

由於用戶的狀態需要記憶,因此在用戶的週期後將其更改爲簡單的已經看過的記號是有意義的。

如果在第一次事件發生後的一週或更長時間內有任何事件發生,那麼很容易將狀態更改爲已經看過的標記。

但是,如果在那周之後沒有事件發生,那麼狀態永遠不會改變爲已經看過的標記,並且狀態將永遠佔據內存。

據我所知,添加超時(到用戶的狀態)將無濟於事,因爲您不允許更改超時狀態的狀態(有意義,因爲它將被刪除)。

有沒有簡單的方法來實現這個用例?

+0

*據我所知,添加超時(到用戶的狀態)將無濟於事,因爲您不允許更改超時狀態的狀態(有意義,因爲它將被刪除)*您能否詳細說明你的意思?如果國家超時,那就意味着在確定的時期內沒有新的事件發生。 –

+0

確實,超時意味着該用戶一週內沒有新事件發生,但這也意味着該用戶的狀態將被刪除,這意味着下一個進入他的事件將被錯誤地視爲他的第一個事件永遠。我想要的不是要刪除的狀態,而是將其更新爲已經看過的標記。不知道當前的API支持這種用例,但... – harel

+0

所以基本上你想要的是一個重複數據刪除機制?如果用戶被看到了,你想放棄他所有的數據嗎? –

回答

0

據我所知,Spark的2.2版mapGroupsWithState具有更豐富的超時時間,不僅可以用來刪除狀態,還可以更改它(檢查here)。