Spark scala как преобразовать целочисленный столбец в dataframe в шестнадцатеричную строку верхнего регистра?

#scala #apache-spark

#scala #apache-spark

Вопрос:

Мы можем использовать следующую функцию для скрытия одного целочисленного значения.

 val x=100
Integer.toString(x, 16).toUpperCase
  

Но как применить его к целочисленному столбцу, чтобы сгенерировать новый столбец с шестнадцатеричной строкой? Спасибо!

Приведенный ниже метод не работает.

 testDF = testDF.withColumn("data_hex_string", Integer.toString(testDF("data"), 16).toUpperCase)
  

Комментарии:

1. проверьте spark.apache.org/docs/latest/api/sql/index.html#conv

2. Спасибо, это очень полезно!

Ответ №1:

AFAIK, нет встроенной функции spark, поэтому создайте функцию udf для этого.

 import org.apache.spark.sql.functions.udf
def toHex = udf((int: Int) => java.lang.Integer.toString(int, 16).toUpperCase)

df.withColumn("hex", toHex($"int")).show()

 --- --- --- 
| id|int|hex|
 --- --- --- 
|  1|  1|  1|
|  2| 11|  B|
|  3| 23| 17|
 --- --- --- 
  

Ответ №2:

Как @jxc уже упоминал в комментарии, используйте conv функцию:

 import org.apache.spark.sql.functions.{conv, lower}
df.withColumn("hex", conv($"int_col",10,16)).show
  

Для тех, кто хочет использовать нижний регистр, оберните его lower :

 df.withColumn("hex", lower(conv($"int_col",10,16))).show