Hbase在自定义比较器中传递值

时间:2017-06-09 13:58:12

标签: hadoop 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")));

在记录器中,我得到的值为Test,但第二个值为1,未打印并打印为null。以下是我在日志中的内容:

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

第一个值1234将被传递给超类,其中WritableByteArrayComparable和其他一个是" 1"我将用于比较逻辑,仅为此类设置。我有什么遗漏或者我需要添加吗?任何帮助都会受到高度关注。

2 个答案:

答案 0 :(得分:0)

找到解决方案,我必须实现来自可写接口的 readFields 编写 方法它完成了。

答案 1 :(得分:0)

在较新的版本中,我们需要创建protobufs,因为在较新的版本中,protobuf用于序列化和反序列化。