groupingComparator是对reduce输入的数据进行分组,比如
public int compare(WritableComparable a, WritableComparable b) { OrderJoin a1 = (OrderJoin) a; OrderJoin b1 = (OrderJoin) b; // 对pdt_code进行分组,返回0则代表是一组,其他随便返回一个值就行 // 经过调试发现此方法并不是将所有输入的key全部重新排序再把相同的合并,而是将前后连着的俩个key进行判断是否合并 // 即输入的key有a,b,c,d,e 那么 只会调用compare方法4次,即(a,b) (b,c) (c,d) (d,e) // 所以并不是我们想象的重新全排序在合并,而是基于前后顺序比较在判断是否合并 // 所以要想实现分组,则Map端传过来的分组的key是必须要经过排序的才适合GroupingComparator分组 if (a1.getPdt_code().equals(b1.getPdt_code())){ return 0; } else { return 1; } }
总结:
对pdt_code进行分组,返回0则代表是一组,其他随便返回一个值就行
经过调试发现此方法并不是将所有输入的key全部重新排序再把相同的合并,而是将前后连着的俩个key进行判断是否合并
即输入的key有a,b,c,d,e 那么 只会调用compare方法4次,即(a,b) (b,c) (c,d) (d,e)
所以并不是我们想象的重新全排序在合并,而是基于前后顺序比较在判断是否合并
所以要想实现分组,则Map端传过来的分组的key是必须要经过排序的才适合GroupingComparator分组
mapreduce 中 groupingComparator 用法
原文:https://www.cnblogs.com/caiba/p/14664582.html