1. 程式人生 > >Spark Streaming狀態管理函式(一)——updateStateByKey和mapWithState

Spark Streaming狀態管理函式(一)——updateStateByKey和mapWithState

updateStateByKey和mapWithState

  什麼是狀態管理函式

  updateStateByKey

  mapWithState

  updateStateByKey和mapWithState的區別

  適用場景

什麼是狀態管理函式
  Spark Streaming中狀態管理函式包括updateStateByKey和mapWithState,都是用來統計全域性key的狀態的變化的。它們以DStream中的資料進行按key做reduce操作,然後對各個批次的資料進行累加,在有新的資料資訊進入或更新時。能夠讓使用者保持想要的不論什麼狀。

updateStateByKey

  updateStateByKey會統計全域性的key的狀態,不管又沒有資料輸入,它會在每一個批次間隔返回之前的key的狀態。updateStateByKey會對已存在的key進行state的狀態更新,同時還會對每個新出現的key執行相同的更新函式操作。如果通過更新函式對state更新後返回來為none,此時刻key對應的state狀態會被刪除(state可以是任意型別的資料的結構)。

mapWithState

  mapWithState也會統計全域性的key的狀態,但是如果沒有資料輸入,便不會返回之前的key的狀態,類似於增量的感覺。

updateStateByKey和mapWithState的區別

  updateStateByKey可以在指定的批次間隔內返回之前的全部歷史資料,包括新增的,改變的和沒有改變的。由於updateStateByKey在使用的時候一定要做checkpoint,當資料量過大的時候,checkpoint會佔據龐大的資料量,會影響效能,效率不高。

  mapWithState只返回變化後的key的值,這樣做的好處是,我們可以只是關心那些已經發生的變化的key,對於沒有資料輸入,則不會返回那些沒有變化的key的資料。這樣的話,即使資料量很大,checkpoint也不會像updateStateByKey那樣,佔用太多的儲存,效率比較高(再生產環境中建議使用這個)。

適用場景

  updateStateByKey可以用來統計歷史資料。例如統計不同時間段使用者平均消費金額,消費次數,消費總額,網站的不同時間段的訪問量等指標

  mapWithState可以用於一些實時性較高,延遲較少的一些場景,例如你在某寶上下單買了個東西,付款之後返回你賬戶裡的餘額資訊。



第二篇:Spark Streaming狀態管理函式(二)——updateStateByKey的使用(scala版)

第三篇:Spark Streaming狀態管理函式(三)——MapWithState的使用(scala版)