解码Avro十进制字节数组字符串

时间:2018-11-21 22:14:49

标签: python python-3.x apache-kafka avro

我正在将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控制台使用者损坏了它?

1 个答案:

答案 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

单步调试器以查看读者如何解码消息,应该使您更接近组装“原始”手工设计的解码器。