NDJSON を Parquet に変換

ここで NDJSON を Parquet に変換できます。無料、アカウント不要です。ファイルを上の枠に落とせば、数秒で結果がダウンロードできる状態になります。 変換はお使いのブラウザーの中で行われるので、ファイルはアップロードされません。Windows でも macOS でも Linux でも、iPhone でも Android でも同じように動き、通信を切っても動き続けます。

  • 処理される場所 ブラウザーの中です。ファイルがアップロードされることはありません。
  • 作り直し ParquetはNDJSONとは仕組みが違います。非可逆コーデックのような段階的な劣化ではありません。Parquetが表現できるものは忠実に再現され、対応するものがないものはまったく残りません。
  • ファイルサイズの上限 1ファイルあたり100MBまで。無料、アカウント不要です。
  • 知っておきたいこと 入れ子のオブジェクトは平らにされて列になります。深く入れ子になったデータは形を失います。

一度に100ファイルまで。フォーマットが混ざっていても構いません。

入れ子は列に平らにされる

Parquet は表形式の列指向フォーマットで、NDJSON のような自由な入れ子構造をそのままでは持てません。この変換はオブジェクトの階層をドットでつないだ列名に平らにし、配列の添字も経路の一部として扱います。

これは JSON を Parquet に書き出すときと同じ処理で、`user.name` や `tags.0` のような列名が生まれます。深く入れ子になったデータほど、列の数は増えます。

型は 4 種類だけに推定し直される

書き込みの際、各列の型は列全体の値を見て、真偽値・32 ビット整数・倍精度浮動小数点・文字列の 4 種類のいずれかに決められます。NDJSON が数値として持っていた値でも、ここで型が決め直されます。

32 ビット整数の範囲を超える整数は、64 ビット整数としてではなく浮動小数点として書き込まれます。正確な整数として扱いたい大きな ID がある場合は、この点に注意してください。

1 つでも例外があれば、列全体が文字列になる

ある列のほとんどの行が数値でも、1 行でも数値でない値(空文字列や説明的なテキストなど)が混ざっていれば、その列全体が文字列型として書き込まれます。列の型は行ごとではなく、列全体で 1 つに決まるためです。

数値の列のつもりで用意したデータに、まれに欠損値として空文字が入っているだけで、列全体が文字列になってしまうことがあります。変換後にスキーマを確認する価値があります。

読み込み側の型も、そのまま保たれるわけではない

Parquet を読み込む側でも、値の正規化が行われます。64 ビット整数は 2 の 53 乗を超える場合に文字列として扱われ、日付は ISO 形式の文字列に、バイナリは小文字の 16 進数文字列になります。入れ子の値は JSON テキストとして表現されます。

つまり NDJSON から Parquet を経由して別の形式へ戻す往復では、型がもとのまま保たれる保証はありません。Parquet を型忠実な中継地点として使うことはできません。

これはこのサイトの表計算系の書き出し全般に共通する処理

JSON や NDJSON から CSV、TSV、SQL、INI、XLSX、Parquet へ書き出す場合、すべて同じ「平らにする」処理を経ます。逆に JSON、YAML、TOML、XML、NDJSON へ書き出す場合は、階層構造がそのまま保たれます。

階層を保ったまま別の形式に移したいだけなら、Parquet は向いていません。列指向の分析ツールに読み込ませたい、という目的がある場合にだけ意味を持つ変換です。

変換はブラウザーの中で完結する

解析と書き込みはブラウザーの中で行われ、NDJSON ファイルがサーバーへ送られることはありません。開発者ツールのネットワークタブを開いたまま試せば確認できます。

限界はメモリーです。データ全体をいったんメモリー上に展開してから書き出すため、数百メガバイト規模のファイルではブラウザーのタブが苦しくなり始めます。

NDJSON を Parquet に変換する手順

  1. お手元の NDJSON ファイル をこのページに落とすか、押してファイルを選んでください。
  2. 変換先に Parquet を選びます。変換はブラウザーの中で行われ、ファイルはアップロードされません。
  3. できあがった Parquet ファイル をダウンロードします。

NDJSON と Parquet——何が変わるか

NDJSONとParquetの比較
NDJSONParquet
正式名称Newline-Delimited JSONApache Parquet
拡張子.ndjson, .jsonl.parquet
メディアタイプapplication/x-ndjsonapplication/vnd.apache.parquet
圧縮方式可逆 — 何も捨てない
最初の公開20132013
発行元Apache Software Foundation
ライセンスオープン標準オープン標準
現在の位置づけ現行現行
ブラウザで開けるか対応なし対応なし
代わりに検討される形式JSON, CSVCSV, JSON

結果を開く

pandasは NDJSON と Parquet のどちらも読めるので、別のプログラムを開かずに、結果を元のファイルと並べて確かめられます。

どちらの形式が何のためのものか

Parquet は Apache Software Foundation の形式で、2013 年から使われています。pandas、Apache Spark、DuckDBがこの形式を読めます。

NDJSON から Parquet:よくある質問

NDJSON ファイル はどこかにアップロードされますか。

いいえ。この変換は完全にブラウザーの中で行われるので、ファイルが端末から出ることはありません。ご自分で確かめられます。開発者ツールのネットワークタブを開いて、何か変換してみてください。ページそのものと、このサービスの費用をまかなっている分析・広告のリクエストは見えますが、あなたのファイルを運んでいるリクエストはひとつもありません。

NDJSON から Parquet への変換は無料ですか。

はい。アカウントも透かしもなく、消費される 1 日の割り当てもありません。お使いの機械の上で動くので、何度でも戻ってきていただけます。ブラウザーが扱えるのは 100 MB までのファイルで、一度に 100 本です。

NDJSON を Parquet に変換すると品質は落ちますか。

NDJSON と Parquet は、内容の表し方が根本から違います。ですからこの変換は複製ではなく再構築です。誠実ではありますが、1 バイトも同じというわけではありません。 入れ子のオブジェクトは平らにされて列になります。深く入れ子になったデータは形を失います。

できあがった Parquet ファイル を開くのに、何かインストールが必要ですか。

変換には要りません。すでに開いているブラウザーの中で行われます。そのあと結果を開くには、お使いの端末がふだん Apache Parquet を表示するのに使っているソフトが必要です。

これらのフォーマットについて