[MapReduce] 分组 GroupingComparator

分组排序步骤:ide

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

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

    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;
    }
    
}
相关文章
相关标签/搜索