Я пытаюсь прочитать файл Avro, используя библиотеку python avro (python 2).Когда я использую следующий код:
import avro.schema
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter, BinaryDecoder
reader = DataFileReader(open("filename.avro", "rb"), DatumReader())
schema = reader.meta
Затем он правильно читает каждый столбец, за исключением одного, который остается в байтах, а не ожидаемые десятичные значения.
Как преобразовать этот столбецк ожидаемым десятичным значениям?Я заметил, что метаданные файла определяют столбец как «тип»: «байты», но «логический тип»: «десятичный»
Я публикую ниже метаданные для этого столбца, а также байтовые значения (ожидаемые фактическиевсе значения кратны 1000 меньше 25 000. Файл был создан с использованием Kafka.
Метаданные:
{
"name": "amount",
"type": {
"type": "bytes",
"scale": 8,
"precision": 20,
"connect.version": 1,
"connect.parameters": {
"scale": "8",
"connect.decimal.precision": "20"
},
"connect.name": "org.apache.kafka.connect.data.Decimal",
"logicalType": "decimal"
}
}
Значения байтов:
'E\xd9d\xb8\x00'
'\x00\xe8\xd4\xa5\x10\x00'
'\x01\x17e\x92\xe0\x00'
'\x01\x17e\x92\xe0\x00'
Ожидаемые значения:
3,000.00
10,000.00
12,000.00
5,000.00
Мне нужно использовать это в лямбда-функции, развернутой в AWS, поэтому я не могу использовать fast_avro или другие библиотеки, использующие C, ачем чистый Python.
Смотрите ссылки ниже: https://pypi.org/project/fastavro/ https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-libraries.html