my sql query
select md5(id) as id from table_name;
its generate alphanumeric value
我正在尝试对我的列进行哈希处理,但是对它的字母数字进行汇总时,它会在蜂巢和Spark中花费太多时间。 所以我可以为此编写UDF还是有其他方法可以将md5转换为数值。
答案 0 :(得分:1)
我不确定为什么要使用数字格式的哈希。由于它是128位的,因此通常以其射线形式被处理为byte[]
。将其转换为数字,您将必须转换为任意精度BigDecimal
,该精度不比String
快。如果速度很慢,我不认为这是因为MD5会产生一个字符串。
如果您仍然想尝试,可以使用
将十六进制字符串转换为BigDecimal
conv(md5(id), 16, 10)
Hive还有一个hash()
方法,它返回一个int值,很可能使用Java的hashCode()
而不是md5,您可以使用它,但是我不知道您的用例,因此它可能会起作用不管你有没有Java哈希码只有32位,因此效率更高,但发生冲突的可能性也更高。
供以后参考,当问一个关于SO的问题时,除了您要尝试做的事情之外,多说一点您要做的事情也是很有用的,这样我们可以更好地帮助您。