この記事は?
業務で.avro
を.json
に変換するツールを作る機会があったのでまとめてみました。
対象者
私のようなこれからavroを触っていく人
環境
- macOS Monterey M1チップ
- Docker Desktop
ツール
source
File tree
pj-root
┣ docker/
┃ ┗ tools/
┃ ┗ Dockerfile
┣ tools/
┃ ┣ avro_converter.py
┃ ┣ avro_input/
┃ ┃ ┗ input.avro # 変換したいファイルを配置
┃ ┃ avro_output/
┃ ┗ requirements.txt
┗ docker-compose.yml
docker/tools/Dockerfile
FROM python:3.8
ENV WORK_DIR /tools
WORKDIR $WORK_DIR
COPY /tools .
RUN pip install --no-cache-dir -r requirements.txt
ENTRYPOINT ["/bin/sh", "-c", "while :; do sleep 10; done"]
tools/avro_converter.py
import avro.datafile
import avro.io
import json
with open('avro_input/input.avro', 'rb') as f:
reader = avro.datafile.DataFileReader(f, avro.io.DatumReader())
records = [r for r in reader]
with open('avro_output/output.json', 'w') as f:
f.write(json.dumps(records, indent=2))
変換後は1行のjsonとなり見づらい&サイズによってはエディターが重くなるので、json.dumps
はインデントつけた方が良いです。
requirements.txt
avro-python3
docker-compose.yml
version: '3'
services:
tools:
build:
context: .
dockerfile: docker/tools/Dockerfile
volumes:
- ./tools:/tools
実行
Terminal
docker-compose build
docker-compose up &
docker-compose exec tools python avro_converter.py
実行するとavro_output/
配下に.json
ファイルが出来てるかと思います。
最後に
気になる点があればコメントお待ちしてます。