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 进行设置只要。有什么我遗漏或需要添加的吗?我们将不胜感激任何帮助。
找到解决方案,我必须实施 readFields 和 write 来自可写接口的方法来完成它。
在较新的版本中,我们需要创建 protobuf,因为在较新的版本中,protobuf 用于序列化和反序列化。
我第一次尝试编写自定义比较器。其中我需要将两个值传递给这个比较器。一个是需要比较的值,一个是我需要编写比较逻辑的标准。下面是相同的代码:
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 进行设置只要。有什么我遗漏或需要添加的吗?我们将不胜感激任何帮助。
找到解决方案,我必须实施 readFields 和 write 来自可写接口的方法来完成它。
在较新的版本中,我们需要创建 protobuf,因为在较新的版本中,protobuf 用于序列化和反序列化。