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分组
posted on 2021-04-15 21:38  菜霸  阅读(110)  评论(0)    收藏  举报