我是第一次尝试编写自定义比较器。其中我需要将两个值传递给该比较器。一个是需要比较的价值,一个是我需要写比较逻辑的标准。以下是相同的代码:
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"我将用于比较逻辑,仅为此类设置。我有什么遗漏或者我需要添加吗?任何帮助都会受到高度关注。
答案 0 :(得分:0)
找到解决方案,我必须实现来自可写接口的 readFields 和 编写 方法它完成了。
答案 1 :(得分:0)
在较新的版本中,我们需要创建protobufs,因为在较新的版本中,protobuf用于序列化和反序列化。