我有一个带有Icao列的DataFrame,该列带有要转换为Long数据类型的十六进制代码。如何在Spark SQL中做到这一点?

|  Icao|count|
+------+-----+
|471F8D|81350|
|471F58|79634|
|471F56|79112|
|471F86|78177|
|471F8B|75300|
|47340D|75293|
|471F83|74864|
|471F57|73815|
|471F4A|72290|
|471F5F|72133|
|40612C|69676|

最佳答案

您可以使用Java Hex到Long转换器

java.lang.Long.parseLong(hex.trim(), 16)

您只需要定义一个udf函数,如下所示
import org.apache.spark.sql.functions.udf
def hexToLong = udf((hex: String) => java.lang.Long.parseLong(hex.trim(), 16))

并使用udf API调用.withColumn函数
df.withColumn("Icao", hexToLong($"Icao")).show(false)

关于scala - 如何将列从十六进制字符串转换为long?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47930150/

10-12 22:12