最近Polars
というRust製の高速データフレームライブラリが流行っているようです。今回はPandasでのjsonlの読み込み方に倣って、Polarsでjsonlファイルを扱ってみます。
JSON Linesとは
JSON Lines
とは、改行区切りで1行1JSONオブジェクトという形式で定義されたファイルで、拡張子は.jsonl
を使います(参考:JSON Lines, atatus JSONL)。以下にjsonlファイル例を示します。
{"id": "0000000", "name": "hoge", "content": "toto"}
{"id": "0000001", "name": "piyo", "content": "titi"}
{"id": "0000002", "name": "fuga", "content": "tutu"}
Pandasでは、以下にようにしてjsonlファイルを読み書きします1。
import pandas as pd
df = pd.read_json('sample.jsonl', orient='records', lines=True) # 読み
df.to_json('hoge.jsonl', orient='records', force_ascii=False, lines=True) # 書き
しかし、Polarsのread_jsonメソッドのドキュメントには、これらのキーワード引数は存在しません。
Polarsでの読み書き方法
結論からいくと、以下のようになります。
import polars as pl
df = pl.read_ndjson('sample.jsonl') # 読み(先行評価)
df.write_ndjson('hoge.jsonl') # 書き
df = pl.scan_ndjson('sample.jsonl') # 読み(遅延評価)
read_ndjsonメソッドで改行区切りJSONファイルを読み込むことができます。
それはいいのですが、このNDJSON
というのがよくわからなかったので以下にまとめます。
NDJSONとは
NDJSON
とは、newline delimited JSON
の略です。JSONLからフォークされたものらしいですが、JSONLと同じと思って問題ないのだと思います。
まとめ
JSONLかNDJSONかどっちかにすることはできなかったのだろうか。
-
orient
は入力ファイルの形式を指定でき、lines
は1行ずつ出力するか決めるオプションです(参考:qtatsuの速報 pythonでJSON Linesを作る方法, note.nkmk.me pandas.DataFrameをJSON文字列・ファイルに変換・保存(to_json)
)。 ↩