近期重温下MapReduce,发现对reduce端的groupcomparator不理解,于是在百度查找答案,看了大多技术贴,很多都是代码例子,依然没看懂(怪我太菜)
于是自己寻找答案,并在此记录。
学过mapreducec的大佬们都知道,在map端产生<key,value>数据后,进过shuttle,之后进入reduce端的数据是以相同的key为一组对应着相同或不同的value。有n个不相同的key,reduce方法会被执行n次。例子如下:
使用数据如下
创建orderbean,数据以orderbean对象在mapreduce进行计算,在reduce端获得数据为orderbean为key,nullwritable为value。通过上述数据会有7个orderbean对象。从下面代码得知每个orderbean对像都是不同的key。
map
reduce
运行结果
当增加groupcomparator时分成一组,代码如下,reduce端只有一个key
groupcomparator
增加groupcomparator运行结果
接着将相同order_id的orderbean分在同一组,根据数据中第一列数据id有三种不同的id,所有的orderbean 会分成三组,此时在reduce端会有三个不同的key
groupcomparator
运行结果
从上面的代码运行结果可以看出groupcomparator根据orderbean的某一属性进一步分组,有几个不同的属性值就会划分为几组,从而在reduce端获得几个不同的key.可以根据不同的业务需求进行使用。
最后又有不对的地方欢迎指正!!!