ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
要点
- Feather および Arrow IPC は Apache Arrow プロジェクトが提供する、メモリ上の列指向レイアウトをそのままディスクに書き出すバイナリ形式。拡張子は
.feather/.arrow/.ipc。 - 2016 年、Pandas の作者 Wes McKinney と R の Hadley Wickham が「Pandas と R 間で高速にデータをやりとりしたい」目的で開発したのが始まり。
- Apache Arrow のメモリレイアウトを直マッピングするため、読み込み時にパースや変換がほぼ不要で、起動コストが極端に小さい。
- 長期保管・分析用途は Parquet が優位、言語間・プロセス間の高速 I/O 用に Feather/Arrow IPC を使うのが現代の定石。
概要
Apache Arrow は「言語に依存しない列指向のインメモリ表現」を統一しようとする OSS プロジェクトで、2016 年に Apache 配下で発足した。Pandas(Python)、data.frame(R)、Spark、Dremio、Drill、DuckDB など、それぞれが内部にバラバラの列指向構造を持っていたのを、同じバイト並びに揃えることでゼロコピーの相互運用を可能にする狙いがある。
その Arrow のメモリ表現を、そのままディスクに書き出したものが Arrow IPC ファイル形式で、初期にはこれを Feather v1 として公開していた。2019 年に仕様を統合する形で Feather v2 = Arrow IPC File Format となり、現在は Feather と Arrow IPC は実質同じものを指す。拡張子は慣習的に .feather(Pandas/R 文化)、.arrow / .ipc(Arrow 公式)と使い分けられる程度。
位置づけとしては Parquet と似て非なるもので、Parquet が「ディスク上でできるだけ小さく、長期保管に適する」ように圧縮とエンコーディングを尽くすのに対し、Feather/Arrow IPC は「メモリ表現と同じバイト並びで、読み込みコストをゼロに近づける」設計になっている。結果として、ファイルサイズは Parquet より大きくなるが、読み込み速度は Parquet を上回ることが多い。
内部構造
Arrow IPC ファイルは Schema → RecordBatch (複数) → Footer という構造で、各 RecordBatch は Arrow のメモリ表現と完全一致するバイト列を持つ。スキーマと長さ情報は Flatbuffers でメタデータ化されており、Flatbuffers のゼロコピー特性により、ファイルを mmap してそのまま列配列として扱える。
- Schema: 列名・型・nullable 情報。Flatbuffers エンコード。
- RecordBatch: 行を一定数まとめた塊。列ごとに「Validity Bitmap(NULL ビット)」「Offsets(可変長型のオフセット配列)」「Values(実データ)」が並ぶ。
- Footer: 各 RecordBatch のオフセット、終端マーカ。
圧縮は LZ4 / ZSTD を選べるが、デフォルトは無圧縮である。Parquet のように Dictionary Encoding や RLE といった論理エンコーディングを内部で施さないのが思想的な違いで、これがゼロコピー読み込みを成立させている。
v1 Feather は仕様が古く、近年は v2 (Arrow IPC) のみが推奨される。Pandas で df.to_feather() すると自動的に v2 で書き出される。
主な用途
- Python ↔ R のデータ交換: Pandas で書いた
.featherを、R のarrow::read_feather()で 1 行で読める。CSV/JSON 経由より圧倒的に速くて型も保たれる。 - Jupyter Notebook での中間ファイル: 数百 MB の DataFrame をセル間や再起動を跨いで保持したいとき、pickle より互換性が高く読み込みが速い。
- 機械学習の前処理出力: 特徴量テーブルを学習プロセスに渡す。Parquet より起動が速いため、何度も読む小〜中規模データで強い。
- プロセス間共有(shared memory): Arrow IPC Stream 形式 + Plasma Store などで、複数プロセス間でゼロコピー共有。
- DuckDB / Polars との連携: 両者とも Arrow ネイティブなので、Feather/Arrow IPC をほぼ無コストで読める。
関連形式との比較
| 形式 | 戦略 | サイズ | 読み込み速度 | 得意 |
|---|---|---|---|---|
| Feather / Arrow IPC | メモリ表現直マッピング | 中〜大 | 非常に高速 | 言語間・プロセス間 I/O、中間ファイル |
| Parquet | 強圧縮・列指向 | 小 | 速い(変換あり) | 長期保管・大規模分析 |
| pickle | Python オブジェクト直列化 | 大 | 速い | Python 内のみ |
| CSV | テキスト・行指向 | 大 | 非常に遅い | 受け渡し |
Wes McKinney 自身が「Parquet は長期、Feather は短期」と整理しており、これがそのまま選定指針になる。1 ヶ月以上保管するなら Parquet(Parquet(.parquet) 参照)、明日のセッションで読み直すだけなら Feather、というイメージ。
コマンド・ツール
Pandas (Python) から。
import pandas as pd
df = pd.DataFrame({"id": range(1000000), "v": [0.5]*1000000})
# 書き出し(自動的に Arrow IPC v2)
df.to_feather("data.feather")
# 読み込み
df2 = pd.read_feather("data.feather")
R から。
library(arrow)
df <- read_feather("data.feather")
write_feather(df, "out.feather")
pyarrow を直接使う場合は、RecordBatchFileWriter / RecordBatchFileReader でストリーミング処理も書ける。
import pyarrow as pa
import pyarrow.ipc as ipc
table = pa.table({"id": [1,2,3], "name": ["a","b","c"]})
with ipc.new_file("sample.arrow", table.schema) as w:
w.write_table(table)
with ipc.open_file("sample.arrow") as r:
print(r.read_all())
DuckDB からは SELECT * FROM 'data.feather' のようにそのまま SQL を投げられる。
注意点
- 圧縮していないとサイズが大きい: Parquet の感覚で長期保管に使うとディスクを食う。長期保管は Parquet、それ以外で Feather と棲み分けるのが基本。
- v1 と v2 の混在: 古い
.featherは v1 で、機能・互換が限られる。新規書き出しはすべて v2 (Arrow IPC) になる。 - 追記不可: 1 ファイル単発書き出しが基本。継続的に増えるログには向かない。
- OS/エンディアン依存ではないが、Arrow バージョン非互換はたまに起きる。長期保管に使うなら pyarrow のバージョンを記録しておく。
関連リンク
- 親: データベース・データ交換
- 概論: ファイル拡張子とは
- カテゴリ: データベース(カテゴリ)
- 同 Wave: Parquet(.parquet) / Avro(.avro) / ORC(.orc) / Protocol Buffers(.proto)
- テキスト系比較: CSV(.csv)
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- SQL ダンプ(.sql)
- SQLite(.sqlite / .sqlite3 / .db)
- Parquet(.parquet)
- Avro(.avro)
- ORC(.orc)
- NDJSON / JSONL(.ndjson / .jsonl)
- BSON(.bson)
- Protocol Buffers(.proto)
- Feather / Arrow IPC(.feather / .ipc / .arrow)
- DB ダンプ(.dump / .bak)
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?