如何将scala中的十六进制十进制列转换为int

Estela Balboa

如某些示例所示,我尝试使用conv函数,但对我不起作用。我不明白为什么该函数在DF列中返回相同的值。我在scala 2.11.11上使用spark2.1,然后又在spark 2.2和scala 2.11.11上尝试过。但是,当我将转换函数应用到SHA2时,它无法按预期运行。我的代码是:

val newDf = Df.withColumn("id",conv(sha2(col("id"),256),16,10).cast(IntegerType))

有什么建议吗?非常感谢你!

德米特

不幸的是,使用convSpark中函数没有一个好的解决方案这是因为来自SHA2的256位哈希太长,无法在Java / Scala中解析为整数。此外,IntegerType像基础Scala一样int是32位。因此,即使conv函数在转换中做得很巧妙,可以处理更大的数字,结果转换仍然会失败。

如果删除对的强制转换IntegerType,则将看到该conv函数返回的结果18446744073709551615与输入值无关。这是2 ^ 64-1,即最大无符号8字节整数值。此值无法成功转换为IntegerTypeLongType,因此转换最终返回null。

如果您真的想深入挖掘,可以在SQL函数NumberConverter使用的Spark的实现中看到conv,它通过64位无符号整数https://github.com/apache/spark/blob进行转换/f07c5064a3967cdddf57c2469635ee50a26d864c/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/NumberConverter.scala#L143

您可能要做的最好的事情是编写一个UDF并做一些聪明的数学运算,以分解可以转换为低阶和高阶分量的值,如果您确实需要将哈希视为整数,则可以重构该分量以处理转换。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将十进制转换为十六进制字符串的十六进制和XOR

如何将负十六进制转换为十进制

使用AWK,如何将十进制数转换为十六进制数

如何将十进制或十六进制值转换为整数?

汇编:如何将十六进制输入转换为十进制?

如何将很大的十进制字符串转换为十六进制?

如何将十六进制字符串转换为十进制值

Python如何将浮点数十六进制转换为十进制

如何将十进制转换为十六进制变量?

如何将 '\x80' 十六进制转换为十进制

如何将十六进制NSData转换为十进制NSData?

在javascript中,如何将十进制(带小数点)转换为十六进制字符串

Python将十进制转换为十六进制

PHP将十进制转换为十六进制

将十六进制转换为十进制

Dart:将十进制转换为十六进制

lex:将十六进制转换为十进制

在cmake中从十进制转换为十六进制

使用python将十六进制十进制数字转换为十进制

如何将十进制代码点转换为UTF-16十六进制(Java语法)?

将十六进制十进制IP地址转换为c#中的点表示法十进制

使用awk将第一列从十六进制转换为十进制

如何使用VB将十进制转换为十六进制?

如何在JavaScript中使用LOOP将十六进制转换为十进制

如何使用C语言将十六进制数组转换为十进制

如何使用MIPS将存储的十六进制数组转换为十进制?

如何使用java将十六进制转换为十进制rgb565?

如何手动将 4 个字节的十六进制转换为十进制

将C中的十六进制字符串转换为十进制