将avro十进制解码为bytearray字符串

bbuxkriu  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(455)

我在用Kafka和avro信息。我的一个字段定义如下:

{ 
    "name": "a_number", 
    "type": "bytes", 
    "logicalType": "decimal", 
    "precision": 4, 
    "scale": 4 
}

使用avro console consumer,我看到如下消息:

{"a_number": "\t\u0000°"}

我希望能和 59 .
按理说,bytearray应该是数字的两个补充。我试过用python的 struct 模块来解码,但我得到的值没有任何意义:

bs = '\t\u0000°'.encode('utf8')    # b'\t\x00\xc2\xb0'
struct.unpack('>l', bs)[0] / 1e4   # 15104.4784

如何验证消息?我可以解码字符串不知何故,或有avro控制台消费者破坏了它?

a8jjtwal

a8jjtwal1#

你似乎很难做到这一点。如何在python中提取avro文件的模式建议使用以下方法:

reader = avro.datafile.DataFileReader(open('filename.avro',"rb"),avro.io.DatumReader())
schema = reader.meta

在调试器中单步查看读者如何解码您的消息应该可以让您更接近于组装一个“原始”的手工解码。

相关问题