hash - 内置的 Apache Hive 哈希函数是如何工作的,我在哪里可以找到该文档?
问题描述
我正在使用 Apache Hive,需要确定内置哈希函数的工作原理。我找到了在杂项下列出的这个页面。功能部分。它说“截至 Hive 0.4”已经可用。hash
hash
我只想看一些关于它到底在做什么的文档。它是确定性的吗?给定相同的输入,它总是会产生相同的输出吗?我应该期待多少次碰撞?
解决方案
根据定义,哈希函数是确定性的,参见。https://en.wikipedia.org/wiki/Hash_function#Determinism
所以如果实现hash()
不是确定性的,那么这将是一个错误,有人会注意到!
警告:该实现可能会发生变化(和错误修复),因此确定性仅代表给定版本的 Hive。
Hive 是开源的。按照 Apache 标准,文档还不错,但仍然不完整。只需检查源代码 => https://github.com/apache/hive
以 Hive 2.1 为例:
hash()
函数(Hive 术语中的 UDF)在此处定义- 它只是调用
ObjectInspectorUtils.getBucketHashCode()
which 调用ObjectInspectorUtils.hashCode()
每个参数,然后将其散列合并到全局“桶”散列中 - 如此处所定义 - 一条评论显示 Hive 实现的(粗)散列方法源自
String.hashCode()
有关 Hive 中的替代散列函数,请参阅在 Hive 中不使用现有散列函数计算散列,但答案基本上指向您已经找到的相同文档页面。
推荐阅读
- sql - 如何运行以下查询?
- powershell - 来自注册表提取的 PowerShell 剩余字符
- c++ - 在 Windows 中编写引用 HDF5 的 CMakeLists 的正确方法
- python - 得到最简化的分数
- powerbi - 有没有办法在矩阵中创建计算的动态列?
- javascript - 如果我们在 Angular 7 中使用 jquery 插件会有什么影响?
- r - read_excel(来自 readxl 包)将 1899-12-30 之前的日期读取为 NA,如何解决这个问题?
- typescript - 打字稿中的独立泛型类型数组
- c# - 绑定达到的依赖属性的触发器/设置器
- php - 在 docker-compose 的 2 个容器之间共享环境变量