[MapReduce] 分组 GroupingComparator

分组排序步骤:

  1. 自定义类继承WritableComparator类 (区别于自定义数据类型时是实现WritableComparable接口)
  2. 重写compare()方法,因为排序后的第一个key将作为该组的key值, 因此也根据业务实现compare

    @override
    public int compare(WritableComparable a, WritableComparable b){
    
        // 比较的逻辑
        return result;
    }
  3. 创建一个构造将比较对象的类传给父类

    protected YourGroupingComparator(){
        // GroupingComparator类有key1 key2 两个成员函数
        // 不设 true将会把GroupingComparator实例的两个key值设为null 会报错
        // 设为true 则会实例化两个key值
        super(YourDataType.class, true);
    }
实例代码:
需求 :
自定义的 WritableComparable 数据类型 为 OderBean
包括 order_id(String), Price(double)成员函数
需要把将具有相同 order_id的分为一个组
Public class OrderGroupingComparator extend WritableComparator{
    protected OrderGroupingComparator(){
        super(OrderBean.class, true);
    }
    
    @override
    public int compare(WritableComparable a, WritableComparable b){
        // 强制类型转换为子类
        OrderBean aBean = (OrderBean) a ;
        OrderBean bBean = (OrderBean) b ;
        
        int result;
        if(a.getOrder_id()>b.getOrder_id()) result = 1;
        else if(a.getOrder_id()< b.getOrder_id()) result=-1;
        else result = 0;
        return result;
    }
    
}

你可能感兴趣的:(mapreduce)