SparkStreaming之mapWithState和updateStateByKey的区别

SparkStreamingmapWithState 算子:

  • mapWithState 是1.6版本之后推出的
  • 必须设置 checkpoint 来储存历史数据
  • mapWithStateupdateStateByKey 的区别:他们类似,都是有状态 DStream 操作,两者都是数据增量的数据。区别在于,updateStateByKey 是输出增量数据(即使本批次没有更新。有的值没有发生变化,还会再打印出来),随着时间的增加,输出的数据越来越多,这样会影响计算的效率,对 CPU 和内存压力较大。而 mapWithState 则只输出本批次数据(本批次数据的变化),但是也含有状态更新。
  • checkpoint 的数据会分散存储在不同的分区中,在进行状态更新时,首先会对当前 keyhash ,再到对应的分区中去更新状态,这种方式大大提高了效率.
  • 源码中有一个注解(@Experimental),说明是实验性质的。

举例来说(wordCount):

1、使用 updateStateByKey

例如第一批数据为: hello how when hello

则结果输出为:(how,1) (when,1) (hello,2)

第二批数据为: when what hi

则结果输出为: (hello,2) (how,1) (when,2) (what,1) (hi,1)

说明:即使是第二批次没有输入 hellohow ,结果还是会数据 hellohow 的累计数量
2、使用 mapWithState

例如第一批数据为: hello how when hello

则结果输出为:(how,1) (when,1) (hello,2)

第二批数据为: when what hi

则结果输出为: (when,2) (what,1) (hi,1)

说明:第二批次没有输入 hellohow ,结果就不会包含 hellohow,结果只是包含此批次的数据变化((how,1) (hello,2) 会存在 checkpoint 中)

参考:
利用mapWithState实现按照首字母统计的有状态的wordCount

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值