PySpark конвертирует ByteArray в Double в dataFrame - PullRequest
0 голосов
/ 29 июня 2018

у меня есть столик с полем ByteArray

spark.sql("select ech_montant, ech_piece from f_echeances where ech_piece = 'FHTL0140'").show()
+----------------+---------+
|     ech_montant|ech_piece|
+----------------+---------+
|[01 4D 4A 92 20]| FHTL0140|
+----------------+---------+

Я пытаюсь преобразовать байты "на лету" в их исходное значение (числовое (24,6) или двойное)

Я пробовал это:

import struct
spark.udf.register('todouble', lambda x: struct.unpack('d', x))
spark.sql("select ech_montant, todouble(ech_montant), ech_piece from f_echeances where ech_piece = 'FHTL0140'").show() 

Но это не с ошибкой

struct.error: unpack requires a bytes object of length 8

Есть ли другой способ продолжить?

Спасибо

1 Ответ

0 голосов
/ 29 июня 2018

Я нашел решение

spark.udf.register('ByteArrayToDouble', lambda x: int.from_bytes(x, byteorder='big', signed=False)
spark.sql("select ByteArrayToDouble(ech_montant) from f_echeances where ech_piece = 'FHTL0140'").show()

+------------------------------+                                                
|ByteArrayToDouble(ech_montant)|
+------------------------------+
|                   55917000000|
+------------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...