CSV, JSONL, Parquet, ORC, Arrow, and Avro can all represent structured data, which makes the number of formats seem unnecessary at first. Even when two formats can describe the same table, however, they differ greatly in how data is laid out, read, compressed, and exchanged.

At a high level, CSV and JSONL are text-friendly formats, Parquet and ORC are column-oriented formats designed for analytical storage, Arrow is a common representation for efficient in-memory processing and interchange, and Avro is a schema-driven system for serializing, storing, and exchanging records. There is no universal winner; the right format depends on what you are optimizing for.

Start by grouping the formats into four roles

CSV / JSONL

Exchange data as text

These are easy to inspect and exchange as text. CSV represents rows and columns; JSONL stores one JSON value per line.

Parquet / ORC

Store columns for analytics

These column-oriented formats are designed to scan selected columns efficiently and use encoding, compression, and metadata for analytical workloads.

Arrow

Move in-memory data efficiently

Arrow centers on a CPU-friendly columnar in-memory representation rather than maximum storage compression. Arrow IPC File and Stream serialize that representation for interchange.

Avro

Work with schema-driven records

Avro serializes records according to a schema. Its commonly used Object Container File stores the writer schema in the file and groups records into blocks.

A quick comparison of the six formats

Consider sales data. CSV can be convenient when a person needs to inspect a small amount in a spreadsheet, while JSONL is a natural fit for records appended one at a time as logs. If you repeatedly aggregate only date and revenue from a dataset with ten million rows and one hundred columns, however, Parquet or ORC becomes a better fit because analytical readers can focus on the columns they need.

Roles, schemas, and typical use cases
FormatCore ideaTypes / schemaGood fit
CSVText rows and columnsNo general built-in type schemaSpreadsheets, simple interchange
JSONLOne JSON value per lineJSON types, usually no file-level schemaLogs, events, sequential processing
ParquetColumnar fileSchema includedLarge analytical datasets
ORCColumnar fileSchema includedLarge analytical datasets
Arrow IPCSerialize and transport columnar memory dataSchema includedFast interchange between processing systems
Avro OCFStore schema-driven records in blocksSchema includedRecord exchange, events, storage

CSV — The simplest text table

CSV is a text format that represents rows and columns using delimiters. Its major strength is accessibility: spreadsheets and many data tools can open it, and a person can inspect it in a text editor. It remains excellent for small tables, exports, and simple interchange.

CSV itself does not generally embed a shared schema saying that one field is an integer, another is a date, or another is an array. Delimiters, encodings, quoting conventions, and date representations can vary between implementations and workflows, and nested data is awkward. Its simplicity is both its advantage and its limitation.

JSONL — One JSON value at a time

JSONL (JSON Lines, often called NDJSON) stores one independent JSON value per line. Because each line is JSON, values can naturally contain numbers, booleans, nulls, arrays, and objects rather than only text-like cells. It can represent richer records than CSV while still being processed one line at a time.

That makes it useful for logs, events, machine-learning datasets, and other record-at-a-time workflows. A program can parse line by line instead of loading one enormous JSON array. JSONL itself, however, normally does not define one mandatory file-wide schema, so fields and types can vary unless the producing and consuming systems enforce additional rules.

Parquet and ORC — similar goals, different layouts and ecosystems

Parquet and ORC are both column-oriented file formats for large structured datasets. They are designed to read selected columns efficiently and use encoding, compression, and column statistics so analytical engines can avoid scanning more data than necessary. It is reasonable to start by thinking of them as formats with very similar goals.

The differences become clearer in their internal layout and historical ecosystems. Parquet organizes data into row groups, column chunks, and pages. ORC organizes the file into stripes that keep column data together with row-group indexes and a stripe footer. A useful mental model is “Parquet divides each row group into columns,” while “ORC packages column data and indexes inside each stripe.” ORC was created to speed up Hive and Hadoop workloads and provides file-, stripe-, and row-group-level statistics and indexes that readers can use to skip irrelevant ranges.

Parquet, meanwhile, was designed as a broadly usable columnar substrate across processing frameworks and has implementations in many languages and analytics tools. The practical choice is therefore usually not “Parquet is newer” or “ORC is faster,” but which format best matches the systems and tools already in your workflow.

A practical Parquet vs ORC comparison
What to compareParquetORC
Main internal unitsRow Group → Column Chunk → PageStripe → Index / Data / Stripe Footer
Skipping irrelevant dataColumn statistics, with optional page indexes and Bloom filtersFile-, stripe-, and row-group statistics and indexes, with Bloom filters available
Background / ecosystemImplemented across many languages and analytics tools; often convenient for cross-tool interchangeOriginated for Hive / Hadoop and has deep Hive integration
Practical rule of thumbYour platform already uses Parquet, or you need broad interoperability across tools and languagesYour platform is ORC / Hive-centric, or you already have ORC-oriented data and operational practices

Arrow — Optimized for working with and exchanging in-memory data

Arrow occupies a different position from Parquet and ORC. The core Apache Arrow format standardizes how tabular data is laid out in memory in a language-independent columnar representation. It is designed so modern CPUs can process data efficiently and so libraries and languages can exchange structured data with less serialization overhead.

Arrow IPC defines File and Stream representations for serializing schemas, record batches, dictionaries, and related buffers. You may therefore encounter `.arrow` or `.ipc` files, but minimizing long-term storage size is not the central goal in the same way it is for formats such as Parquet. A system might read Parquet from storage and then use Arrow as the in-memory representation while processing it.

Avro — Work with records defined by a schema

Avro serializes records in binary according to a schema. A commonly used file representation, the Avro Object Container File, stores the writer schema in file metadata and groups records into blocks that can also be compressed. A reader can inspect that writer schema to understand which fields and types were used to write the records.

JSONL is also convenient for record-at-a-time data, but it remains human-readable text and does not require a file-wide schema. Avro instead emphasizes machine interchange between records governed by schemas. Avro also has encodings other than Object Container Files, so not every Avro payload literally carries a complete schema inside the payload itself.

So which should you choose, Parquet or ORC? Arrow is a different layer

If you already have a data platform, start with the format that platform normally uses. Parquet is often an easy candidate when broad interchange across languages and analytics tools matters. If your existing environment is centered on Hive and ORC, staying with ORC is usually the more natural choice. Converting from one to the other does not automatically make files smaller or queries faster.

If compression ratio or query speed really matters, write the same real dataset with comparable settings and benchmark it using the engine and queries you actually run. Data ordering, column types, filter predicates, and writer configuration can all change the result.

Arrow is easier to understand as a different layer rather than as a storage format competing directly with those two. It provides an in-memory representation and IPC for processing and interchange. Apache Arrow itself distinguishes storage-oriented Parquet from Arrow’s computation-friendly in-memory representation.

So which one should you choose? Start from the job

A useful starting point is: CSV when people need spreadsheet-friendly tables, JSONL for record-at-a-time text workflows, Parquet or ORC for large analytical storage, Arrow for efficient in-memory interchange, and Avro when records are stored or exchanged according to an explicit schema.

Real systems do not need to choose only one. A pipeline might ingest JSONL, store analytical history as Parquet, use Arrow inside a processing engine, and publish schema-aware events as Avro. The number of formats reflects different stages and goals rather than six attempts to solve exactly the same problem.

Four questions to ask when choosing a format

Choosing becomes easier when you start with how the data will be used rather than with a file extension.

  1. Will people read it directly?If people frequently open the data in spreadsheets or text editors, CSV is convenient. JSONL is another option when the records are structured but should remain readable as text.
  2. Will records flow one at a time?For logs and events that are appended and processed one record at a time, JSONL is straightforward. Avro is also worth considering when machine-to-machine records should follow an explicit schema.
  3. Will you scan large datasets?For repeated analytics over selected columns in large datasets, column-oriented Parquet or ORC is a better fit. Parquet is often convenient when broad tool and language interoperability matters, while ORC is a natural candidate in Hive / ORC-centric environments. Confirm the final choice with your actual engine and data.
  4. Do records need an explicit schema?Use Arrow when table data needs efficient interchange between processing systems, and consider Avro when records should be exchanged according to an explicit schema. If a file should carry its writer schema, Avro Object Container File is one option. Arrow IPC also carries schemas, but its design center is efficient columnar processing and interchange.
Try it in Browser Kitty

Parquet Viewer

Inspect Parquet files directly in your browser without uploading them.

Open toolView tool details

Tips and limitations

  • CSV and JSONL are usually plain text, so very large files may trade readability for processing efficiency. Workflows sometimes add an outer compression layer such as gzip.
  • Parquet and ORC file sizes depend on the data, codec, encodings, and writer settings. The format name alone does not determine the compression ratio.
  • Think of Arrow less as 'a faster Parquet file' and more as an in-memory columnar representation plus IPC for efficient processing and interchange.
  • Avro supports schema resolution and evolution patterns, but practical compatibility still depends on writer schemas, reader schemas, and operational rules. Choosing Avro does not make every schema change automatically safe.
  • For any format, being able to inspect a file is different from being able to edit and rewrite it. A read-only viewer can be useful when the goal is to examine the original without modifying it.

Frequently asked questions

Which format produces the smallest files?

There is no universal answer. Parquet and ORC often compress analytical tables well through columnar encoding and codecs, but results depend on the data and writer settings. CSV and JSONL can also be compressed externally with tools such as gzip.

Should I choose Parquet or ORC?

Start with the format your existing platform already uses. Parquet is often an easy candidate when broad compatibility across languages and analytics tools matters. ORC is a natural fit for Hive / ORC-centric environments or existing ORC datasets. Both are columnar analytical formats, so if size or speed is the deciding factor, benchmark your real data with comparable compression settings and the query engine you actually use.

Can Arrow replace Parquet?

They target different jobs. Parquet emphasizes efficient columnar storage, while Arrow primarily emphasizes efficient in-memory processing and interchange. Arrow IPC can be stored as a file, but its design goals are not identical to long-term analytical storage.

What is the biggest difference between JSONL and Avro?

JSONL is readable text with one JSON value per line and no required file-wide schema. An Avro Object Container File carries a schema and stores binary records written according to it.

Is CSV the only one I can open directly in a spreadsheet?

CSV is generally the most directly spreadsheet-friendly format. JSONL, Parquet, ORC, Arrow IPC, and Avro usually require a dedicated import path, extension, data tool, or viewer.

References

For CSV this article refers to RFC 4180 (Informational), and for JSONL to the format documentation at jsonlines.org. Parquet, ORC, Arrow, and Avro are based on the official Apache project documentation and specifications. The Parquet/ORC comparison also refers to the Parquet Overview and ORC Specification / Background pages. CSV and JSONL have implementation and workflow variations, so also check the conventions used by the system that produced your data.