Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive 在不使用配置单元中现有哈希函数的情况下计算哈希_Hive - Fatal编程技术网

Hive 在不使用配置单元中现有哈希函数的情况下计算哈希

Hive 在不使用配置单元中现有哈希函数的情况下计算哈希,hive,Hive,我想计算配置单元中字符串的哈希值,而不只是使用现有函数编写任何UDF。因此,我可以使用类似的方法在其他语言中获得一致的哈希。例如:是否有一些函数可以用来添加字符或执行Xor。这取决于Hive的版本,cf 从ABC中选择XYZ、哈希XYZ 已提供多年,并应用普通的旧java.lang.String.hashCode,返回INT 32位哈希 [编辑2]实际上它有点复杂,因为哈希接受任何类型的参数列表,包括没有内置哈希方法的基元类型,所以使用自定义方法-检查V2.1源代码中的ObjectInspect

我想计算配置单元中字符串的哈希值,而不只是使用现有函数编写任何UDF。因此,我可以使用类似的方法在其他语言中获得一致的哈希。例如:是否有一些函数可以用来添加字符或执行Xor。

这取决于Hive的版本,cf

从ABC中选择XYZ、哈希XYZ 已提供多年,并应用普通的旧java.lang.String.hashCode,返回INT 32位哈希

[编辑2]实际上它有点复杂,因为哈希接受任何类型的参数列表,包括没有内置哈希方法的基元类型,所以使用自定义方法-检查V2.1源代码中的ObjectInspectorTils.hashCode和ObjectInspectorTils.getBucketHashCode

从ABC中选择XYZ、crc32XYZ 需要配置单元1.3,并可能通过java.util.zip.CRC32应用普通的旧循环冗余检查,返回一个BIGINT 32位散列

从ABC中选择XYZ、md5XYZ、sha1XYZ、sha2XYZ、256、sha2XYZ、512 需要配置单元1.3,并应用强加密哈希函数,返回以十六进制表示的二进制128、160、256和512位哈希的字符串


[Edit 1]的答案还有一个很好的变通方法,即使用Apache Commons静态方法和reflect将加密哈希函数应用于较旧版本的Hive。

你的标题中说没有使用现有哈希函数,但你的问题是只使用现有函数,这与此正好相反。实际上,你想要什么?你必须更具体地说明你正在使用的配置单元版本和你所指的其他语言,以便我可以使用类似的方法在其他语言中获得一致的哈希值,因此如果我使用现有的哈希函数,如果我用其他语言计算它,它将不会类似。所以我想使用其他现有函数计算最简单的散列,我也可以用其他语言复制这些函数。例如:我想对字符串进行bucketize,这样我就可以进行ASCIIabc%NoofBuckets,它会给我第一个字符的ascii码,但是跨bucket的分布不会那么好。所以我需要更合理的东西。