码迷,mamicode.com
首页 > 其他好文 > 详细

Map/Reduce中分区和分组的问题

时间:2014-08-14 19:35:59      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   io   strong   数据   ar   art   

全篇结论

分在同一组的<key,value>一定同属一个分区。在一个分区的<key,value>可重载"job.setGroupingComparatorClass(a.class);"中的a类的

compare方法重新定义分组规则,同一组的value做为reduce的输入。

 

一、为什么写

分区和分组在排序中的作用是不一样的,今天早上看书,又有点心得体会,记录一下。

二、什么是分区

1、还是举书上的例子,在8.2.4章节的二次排序过程中,用气温举例,所以这里我也将这个例子说一下。

源数据内容

1900 35°C
1900 34°C
1900 34°C
...
1901 36°C
1901 35°C

书上的例子是为了去除一年当中气温最高的值,那么将年份和气温做了一个复合的key.

2、通过设置了partitioner来进行分区(这里注意了,分区是通过partitioner来进行的)。因为分区是按照年份来进行,所以同年的数据就可以

分区到一个reducer中。但是这样的分区是不能做到对气温划分的,所以分区后的结果如下:

bubuko.com,布布扣

上面这个图是书上的,我只是截取下来而已。可以看到,partition实现了年份同一分区,但是不是一个分组。注意看后面的2条竖线,通过截断表示。

3、如果想把同一年份的气温分组到一起,那么需要做分组的控制。在reducer中以年份部分来分组值,那么同一年的记录就会分到同一个reduce组中。

结果如下:

bubuko.com,布布扣

注意看一下后面2条竖线,和上面的对比,分区和分组相同,那么在reduce输出的时候,只需要取第一个value就能达到输出一年最高气温的目的。

三、总结

1、以上内容是对hadoop全文指南的二次排序的个人理解,可能写的比较晦涩,建议看看8.4.2这个章节。

2、分区和分组是不同的概念,并且进行的阶段也是不同的。

3、一般来说,想要做到分区和分组的排序,key一般都是复合的组合(例如年份和气温构成了key)。

4、分在同一组的<key,value>一定同属一个分区。在一个分区的<key,value>可重载"job.setGroupingComparatorClass(a.class);"中的a类的

compare方法重新定义分组规则,同一组的value做为reduce的输入。

Map/Reduce中分区和分组的问题,布布扣,bubuko.com

Map/Reduce中分区和分组的问题

标签:style   http   color   io   strong   数据   ar   art   

原文地址:http://www.cnblogs.com/netskill/p/3912959.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!