我正在尝试使用Python Avro库(Python 2)读取一个Avro文件。当我使用以下代码时:
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
除一个列外,它正确读取了每一列,但该列仍保留为字节格式,而不是预期的十进制值。
如何将此列转换为预期的十进制值?我注意到文件的元数据将该列标识为“类型”:'bytes',但“逻辑类型”:'decimal'
我在下面发布了此列的元数据以及字节值(预期实际值均为25,000的1,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上部署的Lambda函数中使用此内容,因此不能使用fast_avro或其他使用C而非纯Python的库。
请参阅以下链接: https://pypi.org/project/fastavro/ https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-libraries.html