我正在将Kafka与Avro消息一起使用。我的字段之一是这样定义的:
{
"name": "a_number",
"type": "bytes",
"logicalType": "decimal",
"precision": 4,
"scale": 4
}
使用Avro控制台使用者,我看到这样的消息:
{"a_number": "\t\u0000°"}
我希望等于59
。
应该是字节数组should be the twos-compliment of the number。我尝试使用Python的struct
模块对其进行解码,但是我得到的值没有任何意义:
bs = '\t\u0000°'.encode('utf8') # b'\t\x00\xc2\xb0'
struct.unpack('>l', bs)[0] / 1e4 # 15104.4784
如何验证消息?我可以以某种方式解码该字符串,还是Avro控制台使用者损坏了它?
答案 0 :(得分:1)
您似乎正在努力解决这个难题。 How to extract schema for avro file in python建议的方法是使用:
reader = avro.datafile.DataFileReader(open('filename.avro',"rb"),avro.io.DatumReader())
schema = reader.meta
单步调试器以查看读者如何解码消息,应该使您更接近组装“原始”手工设计的解码器。