md5哈希函数有什么方法可以在HIVE中生成数值? SQL?火花?

时间:2018-07-27 06:56:21

标签: sql apache-spark hive

 my sql query 
select md5(id) as id from table_name;
its generate alphanumeric value 

我正在尝试对我的列进行哈希处理,但是对它的字母数字进行汇总时,它会在蜂巢和Spark中花费太多时间。     所以我可以为此编写UDF还是有其他方法可以将md5转换为数值。

1 个答案:

答案 0 :(得分:1)

我不确定为什么要使用数字格式的哈希。由于它是128位的,因此通常以其射线形式被处理为byte[]。将其转换为数字,您将必须转换为任意精度BigDecimal,该精度不比String快。如果速度很慢,我不认为这是因为MD5会产生一个字符串。

如果您仍然想尝试,可以使用

将十六进制字符串转换为BigDecimal
conv(md5(id), 16, 10)

Hive还有一个hash()方法,它返回一个int值,很可能使用Java的hashCode()而不是md5,您可以使用它,但是我不知道您的用例,因此它可能会起作用不管你有没有Java哈希码只有32位,因此效率更高,但发生冲突的可能性也更高。

供以后参考,当问一个关于SO的问题时,除了您要尝试做的事情之外,多说一点您要做的事情也是很有用的,这样我们可以更好地帮助您。