Parquet 1.18.1 介绍与选型指南

Parquet 1.18.1 介绍与选型指南:以 parquet-java 参考实现与 parquet-cli(parquet-tools 后继)、pyarrow 工具链为切入,溯源列式格式要点与数据湖生态集成,快速上手与 ORC、Avro、Arrow、Delta Lake 量化选型对比(查询日期 2026-10-19)。

ParquetParquet数据仓库OLAP2026/10/19

Parquet 1.18.1 介绍与选型指南

目标:基于官方公开资料(GitHub apache/parquet-java 与 apache/parquet-format 发行页、官方 parquet-cli README、Apache Arrow 官方文档)溯源介绍 Parquet 参考实现 1.18.1 及其工具链与数据湖选型参考,全文不做本地安装与运行实测,所有版本数据均于 2026-10-19 联网实查并随行标注来源。

关于本篇与 Parquet 的关系:Apache Parquet 是 Apache 软件基金会旗下的开源列式存储格式项目;本站 Apache Parquet 专栏已有一篇以格式规范与多实现格局为基准的《Apache Parquet 介绍与选型指南》(链接)。本专栏(Parquet)这篇从另一个角度切入:以 Java 参考实现 parquet-java 及其 parquet-cli 命令行工具(业界惯称的 parquet-tools 工具链)、Python 生态 pyarrow,以及 Parquet 在数据湖生态中的集成为主线。

一、信息基准

1.1 查询说明

  • 查询日期:2026-10-19。
  • 信息获取方式:纯官方资料溯源(GitHub 官方仓库发行页、parquet-cli 官方 README、Apache Arrow 官方文档站),本文不做本地安装与运行实测。
  • 版本结论:Parquet 格式规范与实现分离版本化。本文以 parquet-java(原 parquet-mr)1.18.1 为当前最新稳定实现基准;其 1.19.0 尚处 RC9(2026-09-16)未 GA;格式规范 parquet-format 最新为 2.14.0(2026-09-11);Python 侧 pyarrow 随 Apache Arrow 26.0.0(2026-10-09)发布。

1.2 版本依据

项目实查结果(2026-10-19)来源
parquet-java 最新稳定版1.18.1(GitHub Release 2026-09-13 更新);1.19.0 处于 RC9(2026-09-16),尚未正式发布github.com/apache/parquet-java/releases
格式规范parquet-format 2.14.0(2026-09-11)github.com/apache/parquet-format/releases
pyarrow 基准随 Apache Arrow 26.0.0 发布(2026-10-09);25.0.1(2026-08-10)github.com/apache/arrow/releases
命令行工具parquet-cli 模块随 parquet-java 构建发布(官方 parquet-cli README)github.com/apache/parquet-java(parquet-cli/README.md)
代码仓库apache/parquet-java(stars 3088、2026-10-19 实查)仓库页
开源许可Apache License 2.0仓库 LICENSE

1.3 官方来源清单

来源地址
Parquet 官网https://parquet.apache.org/
parquet-java 仓库https://github.com/apache/parquet-java
parquet-java Releaseshttps://github.com/apache/parquet-java/releases
parquet-format 仓库https://github.com/apache/parquet-format
parquet-cli READMEhttps://github.com/apache/parquet-java/blob/master/parquet-cli/README.md
Apache Arrow 官方文档(Python)https://arrow.apache.org/docs/python/
Arrow Releaseshttps://github.com/apache/arrow/releases

二、软件概述

本文介绍的是 Apache Parquet 及其 Java 参考实现 parquet-java 1.18.1(最新稳定版;1.19.0 处于 RC 阶段)。

Parquet 官网定义其为"开源的列式数据文件格式(column-oriented data file format)",面向高效数据存储与检索,提供高性能压缩与编码方案。它不是可执行程序或服务,而是"格式规范 + 多语言实现"的组合:规范由 parquet.thrift IDL 承载于 parquet-format 仓库;JVM 侧参考实现为 parquet-java(原 parquet-mr);C++/Go/Rust 实现随 Apache Arrow 各仓库发布;duckdb、ClickHouse、polars 等引擎内置实现。

从工程实践视角,Parquet 生态有两类高频接触点:一是命令行检视工具——早期资料中的 parquet-tools 名称即指向 parquet-mr/parquet-java 仓库的命令行工具,当前上游由 parquet-cli 模块承接(官方 parquet-cli README);二是数据湖表格式的底层文件——Parquet 是数据湖场景中引擎间交换数据的事实标准文件格式(详见第七节对比)。

三、核心架构

3.1 实现分层

  • 规范层:parquet-format 仓库定义文件结构、类型系统与编码(当前 2.14.0),是所有实现兼容性的共同基准。
  • 实现层:parquet-java 提供 JVM 侧读写(含 Hadoop 集成路径);pyarrow 提供 Python 侧读写;引擎(Spark、Trino、DuckDB 等)内置各自实现。
  • 工具层:parquet-cli 以 shaded jar 形式提供命令行检视能力,可经 hadoop jar 运行,也可脱离 Hadoop 运行(官方 README 提供 ./mvnw dependency:copy-dependencies 依赖拷贝方式)。

3.2 文件结构要点

Parquet 文件由文件头(magic)、若干行组(row group)、文件尾(footer)构成;行组内按列切分列块(column chunk),列块再分页(page);footer 以 Thrift 记录 schema、编码、压缩与统计信息,是读取端做谓词下推与行组裁剪的依据(官网 Documentation 口径,另见本站 Apache Parquet 专栏文档)。

3.3 编码与压缩

列数据支持 PLAIN、字典、RLE、Delta 系列等编码与 Snappy、GZIP、ZSTD 等压缩;各实现的支持程度以官网实现状态页(Implementation status)矩阵为准。

四、功能特性

4.1 列式存储与高压缩比

同列类型一致带来的编码与压缩优势,是 Parquet 在数仓与数据湖场景取代行存 CSV/JSON 的根本原因;嵌套结构经 Dremel 式 record shredding 表达,列存与复杂 schema 兼得。

4.2 parquet-cli 工具链(parquet-tools 后继)

parquet-cli 提供对 Parquet 文件的元数据与数据检视能力,官方 README 给出的运行形态:

  • 经 Hadoop 运行:hadoop jar parquet-cli-<version>-runtime.jar org.apache.parquet.cli.Main;
  • 设置别名简化调用:alias parquet="hadoop jar /path/to/parquet-cli-<version>-runtime.jar org.apache.parquet.cli.Main --dollar-zero parquet";
  • 脱离 Hadoop 运行:先执行 ./mvnw dependency:copy-dependencies 拷贝依赖(官方 parquet-cli README,2026-10-19 实查)。

需要说明:早期版本中该工具以 parquet-tools 名称随 parquet-mr 发行,社区教程大量沿用旧名;选型与排查时应以上游 parquet-cli 文档为准。

4.3 pyarrow 工具链

Python 侧经 pyarrow.parquet 模块读写 Parquet,是数据科学场景最轻量的 Parquet 工具链;pyarrow 版本跟随 Apache Arrow 发行(当前 26.0.0)。

4.4 数据湖生态集成

Parquet 是数据湖表格式的底层文件格式:Delta Lake、Apache Iceberg、Apache Hudi 等表格式均以 Parquet 文件承载数据,由表格式补充事务、版本与并发控制;Spark、Trino、Flink、Hive 等引擎对 Parquet 均为原生读写。这使得 Parquet 成为"先定文件格式、再选表格式与引擎"架构中的默认底座。

五、快速上手

以下均为官方文档/README 用法的转述,本文不做本地实测。

5.1 Python(pyarrow)读写

官方 Python 文档(https://arrow.apache.org/docs/python/ )给出的核心用法(节选其最小读写形态):

import pyarrow.parquet as pq

# 将 pyarrow.Table 写为 Parquet 文件
pq.write_table(table, "example.parquet")

# 读回 Parquet 文件为 pyarrow.Table
table = pq.read_table("example.parquet")

pyarrow 版本跟随 Apache Arrow(当前 26.0.0,2026-10-09 发布)。

5.2 Java(parquet-cli)构建与运行

官方 parquet-cli README 给出的最小路径(节选):

# 构建(parquet-java 仓库内)
./mvnw clean install -DskipTests

# 经 Hadoop 运行 shaded jar
hadoop jar parquet-cli-<version>-runtime.jar org.apache.parquet.cli.Main

# 或设置 shell 别名
alias parquet="hadoop jar /path/to/parquet-cli-<version>-runtime.jar org.apache.parquet.cli.Main --dollar-zero parquet"

5.3 Maven 依赖

JVM 应用常用坐标 org.apache.parquet:parquet-hadoop(版本 1.18.1,Maven Central 存在,另见本站 Apache Parquet 专栏文档的版本核验节)。

六、适用场景与限制

6.1 适用场景

  • 数据湖与数仓底座:与 Delta Lake/Iceberg/Hudi 表格式及 Spark/Trino 等引擎配合,承载分析型海量数据。
  • 引擎间数据交换:列存 + 自描述 schema 使 Parquet 成为跨引擎导出/导入的通用货币。
  • 本地分析工具链:pyarrow/duckdb 直接对 Parquet 文件做探索式分析,免搭建集群。

6.2 限制与注意事项

  • Parquet 是文件格式而非数据库:无事务、无服务进程,事务语义需湖表格式(如 Delta Lake)补足。
  • 小文件问题:高频写入易产生海量小文件,需要合并(compaction)与分区规划。
  • 版本对齐:格式规范(2.14.0)与各实现版本是两个口径,跨实现读写前应核对官网实现状态矩阵;parquet-java 1.19.0 尚在 RC,生产以 1.18.1 为准。
  • 工具链依赖:parquet-cli 运行需 Java 环境并默认借助 Hadoop 命令,轻量场景可优先 pyarrow。

七、同类选型对比

7.1 候选概览

组件定位开源许可
Parquet(parquet-java 1.18.1)列存文件格式(数据湖事实标准底座)Apache-2.0
ORC(Apache ORC 2.3.1)列存文件格式(Hive 系,自带轻量索引)Apache-2.0
Avro(Apache Avro 1.12.2)行存序列化格式(消息与流场景强项)Apache-2.0
Arrow(Apache Arrow 26.0.0)内存列式格式与跨语言 IPCApache-2.0
Delta Lake(4.4.1)数据湖表格式(事务/版本层)Apache-2.0

7.2 量化对比(2026-10-19 实查)

维度ParquetORCAvroArrowDelta Lake
开源许可Apache-2.0Apache-2.0Apache-2.0Apache-2.0Apache-2.0
GitHub stars3088(parquet-java)770(apache/orc)3305(apache/avro)17211(apache/arrow)9048(delta-io/delta)
最近发版1.18.1(2026-09-13);1.19.0 RC9v2.3.1(2026-07-13)release-1.12.2(2026-08-07)26.0.0(2026-10-09)4.4.1(2026-10-05)
版本节奏稳定线 + RC 迭代(RC9 周期偏长)2.x 主线 + 1.9 维护线年度级小版本月度级 minor4.x 主线 + 3.x 维护线
存储形态磁盘列存文件磁盘列存文件磁盘/消息行存内存列存 + IPC基于 Parquet 等文件的表格式
兼容矩阵Spark/Trino/Flink/DuckDB/polars 原生Hive/Spark 原生Kafka/流生态标准跨语言零拷贝交换Spark/Flink/Trino 引擎支持
典型用途湖仓底座、批量导出Hive 数仓、压缩比敏感场景消息序列化、schema 演进进程间/引擎间数据交换增量处理、ACID 湖表

(stars 与发版时间取自各项目 GitHub Releases 实查;许可见各仓库 LICENSE。)

7.3 选型建议

  • 分析型存储底座:Parquet 与 ORC 二选一时,Parquet 引擎覆盖面更广(Trino/DuckDB/polars 等原生支持),ORC 在 Hive 系数仓与压缩索引上有传统优势(对比详见 《ORC 2.3.1 介绍与选型指南》)。
  • 需要事务与增量处理的湖表:在 Parquet 之上叠加 Delta Lake 等表格式(对比详见 《Delta Lake 4.4 介绍与选型指南》),文件格式仍是 Parquet。
  • 消息与流序列化:Avro 是行存场景标准,与 Parquet 是互补而非替代关系(本站 Apache Avro 专栏另有专篇)。
  • 跨语言高性能数据交换:Arrow 解决的是内存与传输层问题,与 Parquet 的磁盘层定位互补;pyarrow 同时是两者在 Python 侧的统一入口。
  • 工具链选择:轻量探索用 pyarrow,JVM/集群检视用 parquet-cli;遇到 parquet-tools 旧资料时按上文口径换算为 parquet-cli。

八、参考链接