mapreduce编程模型之WritableComparator

WritableComparator在MapReduce中用于控制数据的分组排序。通过设置GroupingComparator,如`job.setGroupingComparatorClass(MyComparator.class)`,我们可以自定义分组逻辑。继承WritableComparator并实现RawComparator接口,可以创建自己的比较器,避免空指针异常。最终,自定义比较器会影响数据在Reducer中的分布,例如示例中'hello'未与其他单词分到同一reduce任务。
摘要由CSDN通过智能技术生成

WritableComparator是一个类 这个类是用于mapreduce编程模型中的比较 排序 

mapreduce中有两次排序 一次是 在环形缓冲区域之中进行分区 排序

还有一次是数据在reduce端获取文件之后进行分组

现在我讲的是后面那个

 //Define the comparator that controls which keys are grouped together or a single call to Reducer#reduce
job.setGroupingComparatorClass(MyComparator.class);

上面是我们在定义job时候进行的配置 配置如何进行分组

setGroupingComparatorClass内部的参数是RawComparator

而WritableComparator是实现RawComparator

所以我们直接继承WritableComparator类就可以自己定义一个MyComparator

public static class MyComparator extends WritableComparator {
        public MyComparator() {
            super(Text.class,true);
        }

        @Override
        public int compare(WritableComparable a, WritableComparable b) {
            Text a1 = (Text) a;
            Text b1 = (Text) b;
            if (a1.toString().equals("hello") && b1.toString().equals("hello")) {
                return -1;
            } else {
                return 0;
            }

        }
    }
上面这段代码我必须说一个坑 坑了我好几个小时 最后在statckvoerflow网站上才找到的提示

就是那个无参构造子 必须调用父类的构造子 不然会报空指针 未初始化 buffer

通过查找源码 也确实发现了这个问题

  protected WritableComparator(Class<? extends WritableComparable> keyClass,
                               Configuration conf,
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值