#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