hbase的bytes.tobytes-它的输出是有序的吗?

cyvaqqii  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(545)

我在用 org.apache.hadoop.hbase.util.Bytes.toBytes(T) . 我将这个函数的输出存储在hbase中的一个值中,然后我想对它使用比较操作( CompareOp.GREATER , CompareOp.LESS ...).
输出 Bytes.toBytes(T) 保持这些类型的“可比性”?我的意思是 double 例如:

double d1 = ..., d2 = ...;
Bytes.compare(Bytes.toBytes(d1), Bytes.toBytes(d2)) == Double.compare(d1, d2)

这是否适用于这些类型? float /
double int / long String BigDecimal

l7wslrjt

l7wslrjt1#

如果在比较之前转换回java数据类型,那么是的。hbase存储二进制数据。如果将这个二进制文件转换为java数据类型,那么输出值将与输入值和 compare 函数将比较解码为适当数据类型的值。
如果你使用 Bytes.compare ,则这不一定成立,因为这些值是基于它们的二进制顺序进行比较的,而不是基于它们的解码值。
值得注意的是,bigdecimal不是原始数据类型,而是一个包含两个组件的类:
任意精度整数未标度值和32位整数标度。
根据精确的二进制编码 Bytes.compare 结果可能不匹配 BigDecimal.compare 因为bytes函数比较原始二进制数据,而bigdecimal比较解码值。
同样适用于 int 比较。负int有点 1 而正整数有一个符号位 0 . 因此 Bytes.compare 将负数视为大于正数。

相关问题