DoubleValue和FloatValue实现

时间:2015-12-10 19:52:02

标签: apache-flink

我正在查看Apache Flink源代码并阅读flink-core模块。我不明白为什么DoubleValueFloatValue没有实现NormalizableKey接口,IntValue会这样做。

1 个答案:

答案 0 :(得分:4)

NormalizableKey接口定义了生成固定长度二进制前缀密钥的方法,即字节序列。前缀键的目的是直接比较原始字节的值,而无需昂贵的对象反序列化。

这样的固定长度前缀密钥很容易获得整数值,例如IntegerLongShort。但是,浮点值(FloatDouble)的二进制表示与整数值不同,由三部分组成:指数,分数和符号位。由于这种表示,浮点值可以覆盖巨大的值范围(以精度为代价)。可以在不反序列化的情况下进行比较的浮点值的二进制表示不像整数值那样容易定义。此外,规范化密钥的最常见用例是分组或加入。由于这些操作需要对象相等,因此浮点值不常见。

这就是FloatValueDoubleValue未实现NormalizableKey接口的原因。规范化的密钥有利于对浮点值的数据进行排序。