Apache flink DoubleValue和FloatValue的实现
我正在阅读ApacheFlink源代码并阅读Apache flink DoubleValue和FloatValue的实现,apache-flink,Apache Flink,我正在阅读ApacheFlink源代码并阅读FlinkCore模块。我不明白为什么DoubleValue和FloatValue没有实现NormalizableKey接口,但是IntValue实现了。NormalizableKey接口定义了生成固定长度二进制前缀键(即字节序列)的方法。前缀键的用途是直接比较原始字节上的值,而无需昂贵的对象反序列化 对于整数值,例如integer、Long和Short,获取这样一个固定长度的前缀键非常简单。但是,浮点值的二进制表示形式(Float,Double)不同
FlinkCore
模块。我不明白为什么DoubleValue
和FloatValue
没有实现NormalizableKey
接口,但是IntValue
实现了。NormalizableKey接口定义了生成固定长度二进制前缀键(即字节序列)的方法。前缀键的用途是直接比较原始字节上的值,而无需昂贵的对象反序列化
对于整数值,例如integer
、Long
和Short
,获取这样一个固定长度的前缀键非常简单。但是,浮点值的二进制表示形式(Float
,Double
)不同于整数值,它由三部分组成:指数、分数和符号位。由于这种表示法,浮点值可以覆盖很大的值范围(以精度为代价)。无需反序列化即可进行比较的浮点值的二进制表示形式不像整数值那样容易定义。此外,规范化键最常见的用例是分组或连接。由于这些操作要求对象相等,因此它们对于浮点值不太常见
这就是为什么
FloatValue
和DoubleValue
没有实现NormalizableKey
接口的原因。规范化键将有助于按浮点值对数据进行排序。感谢提供详细信息!