
ビッグデータに最適なファイル形式の選び方
最終更新日:
大規模なデータセットの管理には、特有の難しさがあります。ビッグデータの保存にはより多くの費用がかかり、データ処理にもネットワーク、CPU、I/Oの追加コストが必要です。一般に、データセットが大きいほど、保存と処理のコストも高くなります。
まずは基本から見ていきましょう。
ビッグデータとは?
ビッグデータとは、企業が収集した構造化データ、半構造化データ、非構造化データが混在したものです。
実際のところ、あらゆる用途に最適な形式はありません。ビジネス分析アプリには、より小さく、より高速に処理できるデータ構造が役立ちます。データ管理において、最新のアプリやビジネス分析には、データを最適なファイル形式に変換できる仕組みが必要です。
ビッグデータの分析によく使われるファイル形式には、Avro、JSON、Parquet、CSVがあります。
では、使用するファイル形式を選ぶ際には、何を考慮すべきでしょうか?
- 読みやすさ。
- 書き込みにかかる時間とデータ構造の複雑さ。
- 圧縮への対応。
- スキーマの変更への対応。
- ファイルの分割しやすさ。
基本を押さえたところで、各ファイル形式を詳しく見ていきましょう。
JSON
JavaScript Object Notation(JSON)は、ウェブ通信でよく使われるファイル形式です。なぜ事実上の標準になっているのでしょうか?
まず、読みやすいため、アプリで簡単にデータをやり取りできます。次に、複雑なデータ構造や入れ子構造に対応しています。また、ドキュメントのサイズがかなり小さくなります。さらに、クラウド技術、IoT、モバイルアプリにも簡単に組み込めます。
Couchbase、Cassandra、Azure Cosmos DB、Amazon DynamoDB、MongoDBなどのNoSQLデータベースで広く使われています。
JSONを使うメリット
- ほとんどの言語がJSONを標準でサポートしており、シリアライズとデシリアライズを簡単に行えるライブラリがあります。
- 階層構造に対応しているため、1つのドキュメントへのデータ保存や、複雑な関係の表現が簡単になります。
- オブジェクトのリストに対応しています。
- 現在のほとんどのツールがJSONを標準でサポートしています。
デメリット
- パフォーマンスの低下につながることが多いため、データの分析や保存には最適とはいえません。
- 行指向の形式なので、列指向の形式に比べて圧縮率が低くなります。
- すべてのレコードにメタデータが含まれるため、ほかの形式よりもデータ量がかなり多くなります。
CSV
Comma Separated Values(CSV)ファイルは、JSONと同じく行ベースの形式です。プレーンテキストを使ってシステム間で表形式のデータを交換する際によく使われます。そのため、表計算ソフトをよく使う人に支持されています。
データを簡単に共有できるため、一般消費者向け、科学分野向け、ビジネス向けのアプリケーションで広く使われています。
CSVを使うメリット
- 人が読める形式で、手動での編集も非常に簡単です。
- スキーマがとてもわかりやすいです。
- ほぼすべてのアプリケーションでCSVを処理できます。
- 解析や実装が簡単です。
デメリット
- 特殊文字や列のデータ型への対応が不十分です。
- バイナリデータを表現する標準的な方法がありません。
- 引用符とNULLの区別が明確でないため、CSVファイルのインポートが難しくなります。
- 複雑な構造を扱えません。
Parquet
上の2つの定番形式に比べると、比較的新しい形式です。2013年に登場し、入れ子構造のデータを列ベースの形式で保存します。そのため、処理性能とデータ保存の効率に優れています。
Parquetの開発者は、ビッグデータの課題に最適な形式だと述べています。WORM(Write Once Read Many:一度書き込み、何度も読み取る)に最適化されています。大量のデータを読み取るなら、Parquetが有力な選択肢です。書き込みは難しいものの、読み取りは非常に簡単です。
大規模なデータセットを扱うデータウェアハウスに特に適しています。
Parquetを使うメリット
- 圧縮率が非常に高く、最大75%に達します。
- 列指向の形式なので、ディスクI/Oを減らせます。
- 読み取り中心のワークフローでは最も高速な形式です。
- バックアップ、移動、複製が簡単なので、ファイルをとても扱いやすいです。
デメリット
- Spark以外に、このファイル形式をサポートするツールがありません。
- スキーマの変更やデータの修正に対応していません。
Avro
2009年にHadoopから登場したAvroは、シリアライズ基盤として使われる、分割しやすい行ベースの形式です。データをバイナリ形式で保存するため、非常に効率的でコンパクトです。
Java、C、C++、Ruby、Python、C#など、ほぼすべてのプログラミング言語で処理できます。
AvroのスキーマはJSONで保存されるため、読みやすく、理解しやすいです。スキーマ内の要素も簡単に更新できます。
Avroを使うメリット
- 軽量で、データのシリアライズとデシリアライズを高速に行えるため、優れたパフォーマンスを発揮します。
- 分割や圧縮がしやすいため、データ保存に適したファイル形式です。
まとめ
書き込みが最も速い形式はCSVで、人にとって最も読みやすい形式はJSONです。Parquetは一部の列の読み取りが速く、Avroはすべての列を一度に読み取る場合に高速です。
ビッグデータに最も適したファイル形式はAvroとParquetです。圧縮率と分割のしやすさに優れ、複雑なデータ構造にも対応しています。ただし、書き込みやすさと読みやすさには課題があります。
