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

Hbase passing value in custom comparator

我第一次尝试编写自定义比较器。其中我需要将两个值传递给这个比较器。一个是需要比较的值,一个是我需要编写比较逻辑的标准。下面是相同的代码:

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 的值将传递给 super class,其中 WritableByteArrayComparable 和另一个为“1”的值以及我将用于比较逻辑的相同值,为此 class 进行设置只要。有什么我遗漏或需要添加的吗?我们将不胜感激任何帮助。

找到解决方案,我必须实施 readFieldswrite 来自可写接口的方法来完成它。

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