An in-memory standard, not a file format
Apache Arrow is the language-independent columnar memory format that Pandas (3.0+), Polars, DuckDB, PyArrow, and many database client libraries use internally. It's not a file format you write to disk for archival (though Arrow IPC files exist); it's the in-memory representation that makes data movement between tools cheap.
Why this matters in practice
The old world: a Pandas DataFrame in memory was bytes laid out one way; a Spark DataFrame was laid out another way; a PostgreSQL row was a third way. Moving data between them meant serialize-deserialize, every time. Arrow flattens this: when both sides speak Arrow, they share the same memory buffers — no copy, no serialization, no format translation. pl.from_pandas(df), duckdb.sql(...).arrow(), arrow_table.to_pandas(zero_copy_only=True) all become microsecond operations instead of milliseconds.
When you'll touch Arrow directly
- When you want a tool-neutral format on disk that's faster to load than Parquet (Arrow IPC files for short-term scratch).
- When you ship data over the network with Arrow Flight instead of REST/JSON.
- When you call
pyarrow.parquetdirectly becausepd.read_parquetdoesn't expose a feature you need.
Most of the time, you don't import Arrow yourself. You just notice that picking Arrow-aware libraries makes the rest of the stack feel fast.