Rak*_*aks 2 python python-3.x avro
根据 AVRO 文档,对于二进制编码的 AVRO,我知道有两个重要方面。一种是 AVRO 模式,即:.avsc(以 JSON 表示),它描述数据的字段,然后是二进制编码的实际数据。
关于 JSON 编码的 AVRO 的文档很少,所以我试图了解它是否遵循相同的语义,其中我们将拥有 JSON 格式的 AVRO 模式文件(即:.avsc 文件),后跟以 JSON 编码的数据的有效负载?或者它是否只是完全 JSON 编码的有效负载,其中每个键的值都是二进制编码的?
尝试使用 Python 进行实验,以便任何线索/示例代码都会有所帮助。
谢谢!
小智 5
二进制和 JSON 编码仅与有效负载本身有关。例如,如果您有这样的架构:
{
"type": "record",
"name": "test",
"fields" : [
{"name": "a", "type": "long"},
{"name": "b", "type": "string"}
]
}
Run Code Online (Sandbox Code Playgroud)
并且您有一条记录,其a
字段的值为27
,其b
字段的值为foo
,则二进制编码将是以下十六进制字节序列:
36 06 66 6f 6f
Run Code Online (Sandbox Code Playgroud)
而 JSON 编码则很简单:
{"a": 27, "b": "foo"}
Run Code Online (Sandbox Code Playgroud)
二进制格式更加紧凑,但 JSON 格式当然更具可读性。
当您谈论将架构和有效负载编码为一个输出的语义时,您实际上是在谈论 avro 容器文件(https://avro.apache.org/docs/current/spec.html#Object+Container+Files)并且那些仅使用二进制编码。对于使用 JSON 编码的容器文件没有规范。无需任何先验知识即可解析 avro 文件,因为架构已烘焙到文件中,但 JSON 编码的 avro 始终需要架构作为输入,因为它不会像 avro 文件那样烘焙到结果中。
如果您使用的是 Python,avro
据我所知,标准库不支持 JSON 编码,但它fastavro
支持。用于阅读和写作的文档如下:
https://fastavro.readthedocs.io/en/latest/json_reader.html https://fastavro.readthedocs.io/en/latest/json_writer.html