HBase:过滤器不适用于负整数

时间:2013-06-22 07:42:26

标签: java serialization hbase

我们已经成功实施了QualifierFilter以及ValueFilter(使用BinaryComparator)Hbase,它们在大多数情况下都能正常运行。但是,在number > -10number < -10

等情况下,它们会失败

请注意number = -10工作正常。此外,number > 10number < 10也正常运作。

如果您想查看代码,请查看以下链接:
1. QualifierFilter - 相关行数为126-142
2. Value Filter - 相关行数为107-128

根据this blog,如果我们想要为rowkeys存储负值,这可能是序列化的问题,我们应该编写自己的序列化器进行比较。
所以我们想知道:
1.在这种情况下是否真的有必要编写自己的序列化器? 如果是,怎么样?任何一个例子都会有很大的帮助。

1 个答案:

答案 0 :(得分:3)

由于Hbase只有二进制比较器而不是其他“类型”比较器,因此无法对负整数进行过滤,因为它存储负数的2。此外,负2的补语整数的二进制表示将在最大正数之后按字典顺序排列,这就是它不起作用的原因。

解决方法是更改​​数字的有符号位。事后工作正常。请注意,这仅适用于整数而不适用于浮点类型。