reduceByKey(_+_)

比如我的内存中存在如下的以key-value形式的数据集(RDD):

hello:1 sparkSubmit:1 red:1 sparkSubmit:1 hello:2 hello:1 hello:4 red:1 red:1 red:1 … …

reduceByKey的作用对象是(key, value)形式的RDD,而reduce有减少、压缩之意,reduceByKey的作用就是对相同key的数据进行处理,

最终每个key只保留一条记录。

保留一条记录通常有两种结果。一种是只保留我们希望的信息,比如每个key出现的次数。第二种是把value聚合在一起形成列表,

这样后续可以对value做进一步的操作

以上面的数据集为例,在spark中比如是word:RDD[(String, Int)] 两个字段分别是word、单个单词在不同文件中出现的次数,现在

我们需要统计每个单词出现的总次数。

我们可以这样写:

val word = rdd1.reduceByKey((x,y) => x+y)
对上述的写法简化一下:

val word= rdd1.reduceByKey(+)

reduceByKey

reduceByKey会寻找相同key的数据,当找到这样的两条记录时会对其value(分别记为x,y)做(x,y) => x+y的处理,即只保留求和之后的数据作为value。

反复执行这个操作直至每个key只留下一条记录。

如果觉得简化后的写法比较难易理解,先看不简化之前的写法是这样理解的,以上面的数据集为例,从左到右第一个hello这个key对应的值是1,

这个1就是不简化写法之前的x,然后继续找从左到右第五个又是hello,那么第二个找到的helloKey对应的value是2,这个2就是不简化写法之前的y。

然后reduceByKey就对当前找到的这两个相同的key的value做一个加法,然后得到一个新的key-value,这个新的的key-value的key就是hello而value就

是相加以后的结果3,然后继续找第三个key为hello的单词,找到以后和刚才相加以后得到的新的hello:3继续相加,此时你可以把之前相加得到

的3作为x,把找到的第三个key为hello的单词对应的value作为y,然后继续相加,再得到第二个新的key-vlaue,这个第二个新的key-vlaue的key为hello,

value为4,然后这个第二个新的vlaue4又作为x,然后在继续找其他的相同的key,找到后以此类推。

而简化以后的写法第一个_下划线就代表x,第二个_下划线代表y。然后原理就是上面写的

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值