hadoop分组与分区

一、为什么写
分区和分组在排序中的作用是不一样的,今天早上看书,又有点心得体会,记录一下。
二、什么是分区
1、还是举书上的例子,在8.2.4章节的二次排序过程中,用气温举例,所以这里我也将这个例子说一下。
源数据内容
1900 35°C
1900 34°C
1900 34°C
...
1901 36°C
1901 35°C
书上的例子是为了去除一年当中气温最高的值,那么将年份和气温做了一个复合的key.
2、通过设置了partitioner来进行分区(这里注意了,分区是通过partitioner来进行的)。因为分区是按照年份来进行,所以同年的数据就可以
分区到一个reducer中。但是这样的分区是不能做到对气温划分的,所以分区后的结果如下:
                              
上面这个图是书上的,我只是截取下来而已。可以看到,partition实现了年份同一分区,但是不是一个分组。注意看后面的2条竖线,通过截断表示。
3、如果想把同一年份的气温分组到一起,那么需要做分组的控制。在reducer中以年份部分来分组值,那么同一年的记录就会分到同一个reduce组中。
结果如下:
  
注意看一下后面2条竖线,和上面的对比,分区和分组相同,那么在reduce输出的时候,只需要取第一个value就能达到输出一年最高气温的目的。
三、总结
1、以上内容是对hadoop全文指南的二次排序的个人理解,可能写的比较晦涩,建议看看8.4.2这个章节。
2、分区和分组是不同的概念,并且进行的阶段也是不同的。
3、一般来说,想要做到分区和分组的排序,key一般都是复合的组合(例如年份和气温构成了key)。
4、分在同一组的一定同属一个分区。在一个分区的可重载"job.setGroupingComparatorClass(a.class);"中的a类的
compare方法重新定义分组规则,同一组的value做为reduce的输入
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值