Я видел предыдущую ветку на этот вопрос.
Расширение этого как, предположим, у вас есть df
как
+--------------------+
| myfield|
+--------------------+
|[00, 8F, 2B, 9C, 80]|
| [52, F4, 92, 80]|
+--------------------+
РЕДАКТИРОВАТЬ: Поскольку формат столбца myfield
равен bytearray(b'\x00')
, способ преобразования следующий (как указано @Ftagn).В противном случае, если это список строк, используйте commented return
.
def func(val):
return int.from_bytes(val, byteorder='big', signed=False) / 1000000
# return int("".join(val), 16)/1000000
func_udf = udf(lambda x: func(x), FloatType())
. Для создания вывода используйте
df = df.withColumn("myfield1", func_udf("myfield"))
. Это дает
+--------------------+--------+
| myfield|myfield1|
+--------------------+--------+
|[00, 8F, 2B, 9C, 80]| 2402.0|
| [52, F4, 92, 80]| 1391.76|
+--------------------+--------+
Вместо этого, если вы используете,
df = df.withColumn("myfield", func_udf("myfield"))
вы получите,
+-------+
|myfield|
+-------+
| 2402.0|
|1391.76|
+-------+