파일 포맷이 아니라 in-memory 표준
Apache Arrow 는 Pandas (3.0+), Polars, DuckDB, PyArrow, 그리고 수많은 DB 클라이언트 라이브러리가 속으로 함께 쓰는, 언어에 묶이지 않는 columnar 메모리 포맷이야. Disk 에 오래 보관하는 파일 포맷은 아니야. Arrow IPC 파일이 있긴 하지만, 본질은 도구 사이의 데이터 이동을 공짜에 가깝게 만드는 in-memory 표현이야.
실전에서 왜 중요해?
옛 세상은 이랬어: 메모리 속 Pandas DataFrame 은 byte 를 이렇게 눕히고, Spark DataFrame 은 저렇게 눕히고, PostgreSQL row 는 또 다르게. 건널 때마다 serialize-deserialize. Arrow 가 그 벽을 없애 — 양쪽 다 Arrow 를 쓰면 같은 메모리 buffer 를 그대로 공유해. Copy 없음, serialization 없음, 포맷 변환 없음. pl.from_pandas(df), duckdb.sql(...).arrow(), arrow_table.to_pandas(zero_copy_only=True) 가 ms 짜리가 아니라 µs 짜리 연산이 돼.
Arrow 를 직접 만질 때
- Parquet 보다 빨리 로드되는 도구 중립 disk 포맷이 필요할 때 (단기 scratch 용 Arrow IPC).
- REST/JSON 대신 Arrow Flight 로 tabular 데이터를 네트워크로 나를 때.
pd.read_parquet가 안 열어 주는 기능이 필요해서pyarrow.parquet을 직접 부를 때.
대부분은 Arrow 를 직접 import 할 일이 없어. Arrow-aware 라이브러리를 골라 쓰다 보면 stack 의 나머지가 어쩐지 빨라졌다는 것만 알아채게 돼.