SparkStreaming状态计算(updateStateByKey mapWithState)区

updateStateByKey 算子

返回的是带有状态的DStream,在这个DStream里面,每一个key的状态是可以被更新的,通过一个给定的函数,把之前的key的状态和当前key新的状态联合起来计算,用于维持每个key的任意状态。说白了也就是说每一次的老的计算状态都给记录下来,新的计算状态用于去更新老的状态。

也即是说它会统计全局的key的状态,就算没有数据输入,它也会在每一个批次的时候返回之前的key的状态。

缺点:若数据量太大的话,需要checkpoint的数据会占用较大的存储,效率低下。

两步骤:

  1. Define the state - The state can be an arbitrary data type.
  2. Define the state update function - Specify with a function how to update the state using the previous state and the new values from an input stream.
SparkStreaming状态计算(updateStateByKey mapWithState)区别

不论是否重启,程序的运行状态都保存完好

SparkStreaming状态计算(updateStateByKey mapWithState)区别

mapWithState (生产中推荐使用)

mapWithState:也是用于全局统计key的状态,但是它如果没有数据输入,便不会返回之前的key的状态,有一点增量的感觉。效率更高,生产中建议使用

优点:我们可以只是关心那些已经发生的变化的key,对于没有数据输入,则不会返回那些没有变化的key的数据。这样的话,即使数据量很大,checkpoint也不会像updateStateByKey那样,占用太多的存储

SparkStreaming状态计算(updateStateByKey mapWithState)区别


分享到:


相關文章: