5

我们已经成功实现QualifierFilter以及ValueFilter(使用BinaryComparator)Hbase,并且它们在我们的大多数情况下都运行良好。然而,他们在像number > -10 或这样的情况下失败了number < -10

请注意,number = -10它工作得很好。此外,number > 10并且number < 10工作正常。

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

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

4

1 回答 1

3

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

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

于 2013-07-15T09:53:49.817 回答