2017-06-09 42 views
0

我正在嘗試第一次編寫自定義比較器。其中我需要將兩個值傳遞給此比較器。一個是需要比較的價值,另一個是我需要編寫比較邏輯的標準。下面是相同的代碼:Hbase通過自定義比較器的值

public class IdComparator extends WritableByteArrayComparable { 

private String criteria; 

static final Log LOG = LogFactory.getLog(IdComparator.class); 

public IdComparator(){ 
    //NoOp 
} 

public IdComparator(byte[] value,byte[] criteria){ 
    super(value); 
    this.criteria = new String(criteria); 
} 

public String getCriteria(){ 
    return this.criteria; 
} 

@Override 
public int compareTo(byte[] value, int offset, int length) { 
    String csv_CBC = new String(value, offset, length); 
    LOG.info("IdComparator :: csv :: "+csv); 
    byte[] bytesToCompare = this.getValue(); 
    LOG.info("IdComparator :: csv :: "+new String(bytesToCompare) + " criteria :: "+getCriteria()); 
    //filtering logic goes here 
    return result; 
} 

} 

現在,當我把這種比較器過濾,並通過一些值

new SingleColumnFilter(...., 
    new IdComparator(Bytes.toBytes("1234"),Bytes.toBytes("1"))); 

在記錄我得到的值作爲測試,但是這是1是第二值沒有被打印和打印爲空。下面是我在日誌了:

IdComparator :: csv :: 56783,44445,56664,97633 
IdComparator :: csv :: 1234 criteria :: null 

這是1234將被傳遞給超類的第一個值WritableByteArrayComparable和另一種是「1」,同樣的,我將使用比較邏輯,設置只有這個類。有什麼我失蹤或我需要添加?任何幫助將高度appriciated。

回答

0

在較新的版本中,我們需要創建protobufs,因爲在較新的版本中,protobuf被用於序列化和反序列化。

0

找到了解決辦法,我不得不實施閱讀字段方法,其中來自寫入接口把它完成。