使用 Python 中的 AVRO,仅用于序列化

问题描述 投票:0回答:1

我想使用 Avro 来标准化二进制格式,以便跨不同应用程序进行对象序列化。应用程序本身不会使用 Avro RPC 进行通信。可能会使用像 ZeroMQ 这样的东西。

我正在尝试编写一个简单的原型,其中 Python 客户端与 Scala 服务器对话。我对 Scala 方面没有问题,但我不太确定在 Python 方面该怎么做。我尝试按照官方指南以及许多博客文章进行操作。

在指南和我找到的帖子中,示例仅显示如何从文件写入/读取,或如何通过 Avro 进行 RPC。我希望能够编写某个对象的 Avro 字节表示

  • 在记忆中,和
  • 不包括架构

我可以在发送端和接收端部署模式的副本,但模式本身不应该传播,因为消息将是原子的,我不希望在每个请求上发送模式的开销.

python avro 库是否可以实现上述功能?

python avro
1个回答
0
投票

使用fastavro

import fastavro
import io

# read serialized data:
schema = get_my_schema()
message = fastavro.schemaless_reader(io.BytesIO(input_bytes), schema)
# optionally add reader_schema parameter:
message = fastavro.schemaless_reader(io.BytesIO(input_bytes), writer_schema, reader_schema)



# write data:
binary_output = io.BytesIO()
schema = get_my_schema()
fastavro.schemaless_writer(binary_output, schema, object_to_serialize)

其中

input_bytes
是序列化的Avro记录没有模式

© www.soinside.com 2019 - 2024. All rights reserved.