Parquet vs CSV vs JSON: why your 2 GB CSV is a 200 MB Parquet
How the three formats store the same rows, why columnar files are 10x smaller and faster to scan, the type traps of the CSV round-trip, and when each format is the right call.
Get the free PDF
One page, print-ready, free to share. No signup needed.
Your 2 GB CSV is a 200 MB Parquet. Same rows, same columns: the difference is the format tax, and your storage bill and query times both pay it. One page on picking file formats on purpose. The print-ready A4 PDF is at the bottom.
The three
- CSV: rows of text, no types, parse every byte.
- JSON: nested documents, keys repeated on every row.
- Parquet: columnar, typed, compressed. Built for analytics.
Size
df = pd.read_csv("sales_2026.csv") # 2.1 GB
df.to_parquet("sales_2026.parquet") # 205 MB
# and reads pick their columns
pd.read_parquet("sales_2026.parquet", columns=["date", "amount"])
Per-column compression is the whole trick: similar values sit together, so dictionary and run-length encoding crush them. JSON is the biggest of the three because the keys ride along on every single row.
Speed
- Columnar reads: load the 3 columns you asked for, skip the other 47.
- Predicate pushdown: row-group statistics let filters skip whole chunks unread.
- CSV scan: parse everything, always, to answer anything.
Types
| Column in | After a CSV round-trip | In Parquet |
|---|---|---|
| zip "00123" | 123, an int now | "00123", string |
| 2026-09-25 | a string, parse again | date32, stays a date |
| NULL vs "" | both become empty | null survives |
When each wins
- CSV: humans, Excel, one-off exchange with systems you do not control.
- JSON: APIs, events, genuinely nested data.
- Parquet: lakes, warehouses, anything a query engine scans.
Gotchas
- CSV delimiter roulette: commas inside quotes, encodings, BOMs.
- Parquet is not appendable row by row: write new files, partition by date.
- Parquet is not human-readable: keep a small CSV sample next to it for eyeballing.
Interview phrasing worth memorizing: CSV is a serialization of strings, not of data. Exchange in CSV, run analytics on Parquet.
Frequently asked questions
Why is a Parquet file so much smaller than the same data as CSV?
Why are analytics queries faster on Parquet than on CSV?
When should you still use CSV or JSON?
What does a CSV round-trip do to your data types?
Get the free PDF
One page, print-ready, free to share. No signup needed.