Data engineering workbench

DevToolBox

Parquet to CSV Converter

Convert a Parquet file to CSV in your browser. Choose the rows (current page, filtered results or all rows), the delimiter, how NULLs are written and what happens to nested columns. Nothing is uploaded.

Processed locally
File

Open a .parquet file to convert it to CSV, or try the sample file. You can also drop a file here.

Read in your browser · nothing is uploaded

How to convert Parquet to CSV

  1. Open the .parquet file, or click Try sample file. The tool opens on the Export tab with CSV selected.
  2. Choose Rows to export: the current page, the rows matching your filters (set them on the Rows tab), or all rows. Each option shows its row count before you export.
  3. Pick a delimiter (comma, semicolon, tab or pipe) and how to write NULL: an empty field, NULL or \N.
  4. Choose what to do with nested columns (lists, structs, maps): write them as JSON text in one cell, or leave them out.
  5. Click Export. Large files export row group by row group with a progress bar and a Cancel button.

Worked examples of each option, with real output: Parquet to CSV without losing precision, NULLs or nested data.

What the CSV contains

The first line is the header, in the file's column order. Fields that contain the delimiter, a quote, a line break or leading/trailing spaces are quoted, with quotes doubled (RFC 4180). Empty strings are always written as "" so they stay different from NULLs. Lines end with CRLF.

Step-by-step walkthrough: How to open and inspect a Parquet file without Python or Spark.

How values are shown and exported

  • Large integers (INT64/UINT64) keep every digit. In JSON, integers inside ±9,007,199,254,740,991 are numbers; larger ones are strings, because JavaScript numbers cannot hold them exactly.
  • Decimals are read from their stored integers and written as exact strings with the column's scale, for example "12345678901234.5678" — in JSON too.
  • Timestamps keep full millisecond, microsecond or nanosecond precision as ISO 8601. A Z is added only when the column is marked as adjusted to UTC; local (no-timezone) timestamps and legacy INT96 timestamps are shown without one and labelled. More in Parquet timestamps explained.
  • Null, empty and missing are shown differently: null, "", and missing for a field absent from a struct. In CSV, nulls use the token you choose and empty strings are always written as "", so the two stay distinguishable.
  • Nested values (lists, structs, maps) stay nested in JSON. In CSV they are written as JSON text in one cell, or left out.
  • Binary columns are written as Base64. NaN and Infinity are written as strings in JSON.

Does my Parquet file get uploaded?

No. The file is read in your browser with File.slice(), and decoding runs in a Web Worker on your device. File contents and filter values are not sent in any network request; our browser test suite checks every request made while a file is open. Clearing the file releases the reference to it and stops the worker.

Size limits for CSV exports

Exports are limited by browser memory. The CSV file is built in memory before it is saved, and CSV output is larger than the Parquet data it comes from.

  • One export may cover up to 250 MB of decoded data. A 300 MB export froze the page for 2.4 seconds and a 400 MB export crashed the tab, so larger exports are refused; filter or pick fewer columns and export in parts.
  • One read (a page, or one row group during a filter or export) may decode up to 400 MB. In testing, a single 400 MB row group opened and filtered; larger reads are refused with a message.
  • In the test, all 5,000,000 rows of a 55 MB file (204 MB decoded) exported to a 338 MB CSV file in 9.0 seconds.

These figures come from one machine and one browser: Apple M4 (Mac16,3, 16 GB RAM), Chromium 145.0.7632.6 (headless), measured on 2026-10-02. They are not a guarantee for your device. The 400 MB and 250 MB guards are fixed, so on a computer or phone with less memory, in another browser, or with many tabs open, a file inside the guards can still run out of memory and close the tab. If that happens, select fewer columns or use DuckDB.

Full measurements for every test file: Parquet Viewer — limits measured for this tool.

Frequently asked questions

How do I convert Parquet to CSV without Python?

Open the file here, keep CSV selected, choose the rows and options, and click Export. The conversion runs in your browser; pandas, pyarrow or Spark are not needed.

How are NULL values written in the CSV?

As an empty field by default, or as NULL or \N if you choose. Empty strings are always quoted (""), so a NULL and an empty string never look the same.

What happens to nested columns?

CSV has no nested types, so lists, structs and maps are written as JSON text in a single cell. You can also leave nested columns out.

Can I export only some rows?

Yes. Add filters on the Rows tab, then choose Filtered results. You can also export just the current page, or limit columns with the Columns menu.

Do decimals lose precision in the CSV?

No. Decimals and 64-bit integers are written digit for digit from the stored values.

Related tools