DoubleValue 和 FloatValue 实现

DoubleValue and FloatValue Implementation

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

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

对于 IntegerLongShort 等整数值,获取这样的固定长度前缀键是微不足道的。但是,浮点值(FloatDouble)的二进制表示不同于整数值,它由三部分组成:指数、分数和符号位。由于这种表示,浮点值可以覆盖很大的值范围(以精度为代价)。无需反序列化即可比较的浮点值的二进制表示不像整数值那样易于定义。此外,规范化键最常见的用例是分组或连接。由于这些操作需要对象相等,因此它们不太常见于浮点值。

这就是为什么 FloatValueDoubleValue 没有实现 NormalizableKey 接口的原因。规范化键有利于根据浮点值对数据进行排序。