Skip to content

avro の Python チュートリアルを試してみる

Avro の Python チュートリアル を試してみたのでメモしておきます。

検証環境

対象 バージョン
macOS 15.2
Python 3.12.7
avro 1.12.0

Avro の概要

Avro はデータフォーマットのひとつです。 同じ目的の他実装には以下などが挙げられます。

Avro のドキュメントページ には Avro の特徴として以下が記載されています。

  • Rich data structures.
  • A compact, fast, binary data format.
  • A container file, to store persistent data.
  • Remote procedure call (RPC).
  • Simple integration with dynamic languages. Code generation is not required to read or write data files nor to use or implement RPC protocols. Code generation as an optional optimization, only worth implementing for statically typed languages.

上述の通り、Avro はデータ本体とは別にスキーマを定義することで型を指定することが出来ます。 また、バイナリ形式である為、高速であり、パフォーマンスに優れるケースが多いようです。

It offers excellent schema evolution, and has implementations for the JVM (Java, Kotlin, Scala, …), Python, C/C++/C#, PHP, Ruby, Rust, JavaScript,

…ということで、様々なプログラミング言語向けの実装があるようです。

インストール

今回は uv でインストールしました。

uv pip install avro

スキーマの定義

1
2
3
4
5
6
7
8
9
{"namespace": "example.avro",
 "type": "record",
 "name": "User",
 "fields": [
     {"name": "name", "type": "string"},
     {"name": "favorite_number",  "type": ["int", "null"]},
     {"name": "favorite_color", "type": ["string", "null"]}
 ]
}

サンプルコード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import avro.schema
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter

schema = avro.schema.parse(open("user.avsc", "rb").read())

writer = DataFileWriter(open("users.avro", "wb"), DatumWriter(), schema)
writer.append({"name": "Alyssa", "favorite_number": 256})
writer.append({"name": "Ben", "favorite_number": 7, "favorite_color": "red"})
writer.close()

reader = DataFileReader(open("users.avro", "rb"), DatumReader())
for user in reader:
    print(user)
reader.close()

実行結果

% python sample.py
{'name': 'Alyssa', 'favorite_number': 256, 'favorite_color': None}
{'name': 'Ben', 'favorite_number': 7, 'favorite_color': 'red'}