[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;
    }
    
}
相關文章
相關標籤/搜索