Convert CSV to Parquet

CSV is where data arrives. Parquet is where it should live once you start querying it. This converter reads your CSV, works out what each column actually contains, and writes a typed, compressed Parquet file — without the data leaving your machine.

  • Runs in your browser
  • No signup
  • No upload
  • Free

CSVParquet

Runs on your device
Options

Reading CSV

Writing Parquet

Parquet is unreadable in a text editor. That is by design.Check your new Parquet file with ParquetReader — opens Parquet files directly.
What happens

How this converter handles CSV to Parquet

  1. Detects the delimiter from the first rows, so semicolon and pipe exports work without configuration.
  2. Infers a type per column: integers, floats, booleans, and text. Values with leading zeros stay text, so IDs and postcodes survive intact.
  3. Writes each column separately with Snappy compression by default, which is what Spark, DuckDB and pandas expect.
  4. Groups rows into row groups so query engines can skip the parts of the file they do not need.
Format differences

CSV vs Parquet

Plain text rows that open anywhere, with no types and no schema. Typed, compressed, columnar storage built for analytical scans.

CSVParquet
Type informationNone — every value is textFull — ints, floats, booleans, timestamps, decimals
StructureFlat rows and columnsColumnar, with nested type support
CompressionNoneBuilt in (Snappy, Gzip, Zstd)
Typical file sizeBaseline (100%)Typically 5–15% of the CSV
SchemaHeader row at bestStored in the file footer
Human-readableYes, in any text editorNo — binary
Tool supportUniversalSpark, DuckDB, pandas, BigQuery, Athena
Worth knowing

What to watch out for

One odd value changes the whole column

Type inference looks at every value in a column, and a single "N/A" in a numeric column forces the entire column to text. Add such words to the "treat as empty" list so they become nulls and the column stays numeric.

Dates stay strings unless you convert them

A column of "2024-01-31" is written as text, not as a Parquet timestamp. That is deliberate: guessing between day-first and month-first formats corrupts data silently. Cast the column in your query engine after loading, where the format is explicit.

Compression choice is a trade, not a free win

Snappy decompresses fast and is the ecosystem default. Gzip produces a noticeably smaller file but costs CPU on every read. Pick Gzip for cold archive storage and Snappy for anything you query regularly.

When you need this

Common reasons to convert CSV to Parquet

Loading into DuckDB or Spark

Both read Parquet far faster than CSV because they can read only the columns a query touches, and skip row groups using the statistics stored in the file.

Cutting cloud storage bills

A typed, compressed Parquet file is commonly 5–15% of the size of the CSV it came from. On S3 or GCS that difference shows up directly on the invoice, and again in every scan-based query charge.

Preserving types across a handoff

A CSV forces the next person to re-guess every type. Parquet stores the schema in the file, so the column that was an integer for you is an integer for them.

FAQ

CSV to Parquet questions

Is my CSV uploaded anywhere?
No. The conversion runs in your browser using WebAssembly and JavaScript. The file is read from your disk into a Web Worker, converted in memory, and handed back as a download. It is never sent to a server, so there is nothing for us to store, log or leak.
How much smaller will the Parquet file be?
Usually between 5% and 15% of the original CSV. Columns with repeated values compress dramatically because Parquet stores each column together and dictionary-encodes it. A file of mostly unique random strings will compress far less.
Which compression codec should I choose?
Snappy unless you have a reason not to. It is the default in Spark, pandas and DuckDB, so a Snappy file opens everywhere without extra configuration. Gzip trades read speed for roughly 20–30% more size reduction.
How large a CSV can this handle?
The practical ceiling is your available RAM, not a server upload limit. Files in the low hundreds of megabytes convert comfortably on a normal laptop. Very large files are best split first, since the browser has to hold the parsed data in memory.
Can I control the Parquet row group size?
Yes, under advanced options. The default of 100,000 rows suits most files. Smaller row groups let engines skip more aggressively on selective queries; larger ones compress better and produce less metadata overhead.