什麼是狀態管理函數函數
updateStateByKey性能
mapWithState網站
updateStateByKey和mapWithState的區別spa
適用場景it
Spark Streaming中狀態管理函數包括updateStateByKey和mapWithState,都是用來統計全局key的狀態的變化的。它們以DStream中的數據進行按key作reduce操做,而後對各個批次的數據進行累加,在有新的數據信息進入或更新時。可以讓用戶保持想要的不論什麼狀。效率
updateStateByKey會統計全局的key的狀態,無論又沒有數據輸入,它會在每個批次間隔返回以前的key的狀態。updateStateByKey會對已存在的key進行state的狀態更新,同時還會對每一個新出現的key執行相同的更新函數操做。若是經過更新函數對state更新後返回來爲none,此時刻key對應的state狀態會被刪除(state能夠是任意類型的數據的結構)。date
mapWithState也會統計全局的key的狀態,可是若是沒有數據輸入,便不會返回以前的key的狀態,相似於增量的感受。map
updateStateByKey能夠在指定的批次間隔內返回以前的所有歷史數據,包括新增的,改變的和沒有改變的。因爲updateStateByKey在使用的時候必定要作checkpoint,當數據量過大的時候,checkpoint會佔據龐大的數據量,會影響性能,效率不高。統計
mapWithState只返回變化後的key的值,這樣作的好處是,咱們能夠只是關心那些已經發生的變化的key,對於沒有數據輸入,則不會返回那些沒有變化的key的數據。這樣的話,即便數據量很大,checkpoint也不會像updateStateByKey那樣,佔用太多的存儲,效率比較高(再生產環境中建議使用這個)。數據
updateStateByKey能夠用來統計歷史數據。例如統計不一樣時間段用戶平均消費金額,消費次數,消費總額,網站的不一樣時間段的訪問量等指標
mapWithState能夠用於一些實時性較高,延遲較少的一些場景,例如你在某寶上下單買了個東西,付款以後返回你帳戶裏的餘額信息。