为了账号安全,请及时绑定邮箱和手机立即绑定

python - 将avro字节逻辑类型十进制反序列化为十进制

python - 将avro字节逻辑类型十进制反序列化为十进制

aluckdog 2021-06-10 14:16:25
我正在尝试使用 python avro 库(python 2)读取 Avro 文件。当我使用以下代码时:import avro.schemafrom avro.datafile import DataFileReader, DataFileWriterfrom avro.io import DatumReader, DatumWriter, BinaryDecoderreader = DataFileReader(open("filename.avro", "rb"), DatumReader())schema = reader.meta然后它正确读取每一列,除了保留为字节的列,而不是预期的十进制值。如何将此列转换为预期的十进制值?我注意到文件的元数据将列标识为 'type' : 'bytes',但 'logicalType' :'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.0010,000.0012,000.005,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
查看完整描述

3 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

为此,您需要使用该fastavro库。无论是avroavro-python3图书馆没有在此张贴的时候支持逻辑类型。


查看完整回答
反对 回复 2021-06-15
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

出于某种原因,fastavro 包在同一个文件上默认工作。我最终使用了下面的代码。仍然不确定是否有办法直接使用 avro 库解决这个问题,或者反序列化上面问题中发布的输出。


import fastavro

with open("filename.avro", 'rb') as fo: 

    for record in fastavro.reader(fo): 

        print(record) 


查看完整回答
反对 回复 2021-06-15
  • 3 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信