我正在使用apachehive,需要确定内置哈希函数是如何工作的。我找到了这个页面 hash 在杂项下。功能部分。上面说 hash 已提供“从Hive0.4起”。我只想看看它到底在做什么的文档。是确定性的吗?对于相同的输入,它是否总是产生相同的输出?我预计会发生多少次碰撞?
hash
yftpprvb1#
根据定义,哈希函数是确定性的,参见。https://en.wikipedia.org/wiki/hash_function#determinism所以如果 hash() 不是确定性的,那么它就是一个bug,有人会注意到的!警告:该实现可能会发生更改(以及错误修复),因此确定性仅代表给定版本的配置单元。hive是开源的。按照apache标准,文档还不错,但仍然不完整。只需检查源代码=>https://github.com/apache/hive例如,对于hive 2.1:这个 hash() 函数(hive术语中的一个udf)在这里定义只是打电话而已 ObjectInspectorUtils.getBucketHashCode() 哪个电话 ObjectInspectorUtils.hashCode() 在每个参数上,然后将其散列合并到全局“bucket”散列中-如这里所定义注解显示,hive实现的(粗略的)散列方法是从 String.hashCode() 有关配置单元中的可选哈希函数,请参阅计算哈希而不使用配置单元中现有的哈希函数,但答案基本上指向已找到的同一文档页。
hash()
ObjectInspectorUtils.getBucketHashCode()
ObjectInspectorUtils.hashCode()
String.hashCode()
1条答案
按热度按时间yftpprvb1#
根据定义,哈希函数是确定性的,参见。https://en.wikipedia.org/wiki/hash_function#determinism
所以如果
hash()
不是确定性的,那么它就是一个bug,有人会注意到的!警告:该实现可能会发生更改(以及错误修复),因此确定性仅代表给定版本的配置单元。
hive是开源的。按照apache标准,文档还不错,但仍然不完整。只需检查源代码=>https://github.com/apache/hive
例如,对于hive 2.1:
这个
hash()
函数(hive术语中的一个udf)在这里定义只是打电话而已
ObjectInspectorUtils.getBucketHashCode()
哪个电话ObjectInspectorUtils.hashCode()
在每个参数上,然后将其散列合并到全局“bucket”散列中-如这里所定义注解显示,hive实现的(粗略的)散列方法是从
String.hashCode()
有关配置单元中的可选哈希函数,请参阅计算哈希而不使用配置单元中现有的哈希函数,但答案基本上指向已找到的同一文档页。