先看结论
- Apache Parquet 是一种按行组和列块保存表格数据的二进制列式数据格式,能否正确读取取决于读取器对文件所用功能的支持。
- 在具备 Python 和 PyArrow 的 Windows 或 Mac 电脑上,先执行 import pyarrow.parquet as pq,再执行 table = pq.read_table('file.parquet'),得到 Arrow 表。table.to_pandas() 可转成 pandas DataFrame。只读指定列可用 pq.read_table('file.parquet', columns=['column_name']);按行组读取可用 pq.ParquetFile('file.parquet').read_row_group(0)。这些示例均在电脑上读取本地文件;手机上的文件建议先传到电脑,再按相同步骤读取。
- Parquet 不预期包含可执行内容,但可保存任意数据和敏感信息。解析器实现与读取配置仍会影响风险:CVE-2025-46762 涉及 parquet-avro 使用 specific 或 reflect 模型时的任意代码执行,generic 模型不受该漏洞影响;记录建议升级至 1.15.2。这不代表其他风险均已消除。模块化加密可以保留未加密区域,AES CTR 本身也不提供认证,不能仅凭加密或扩展名判断安全性。
Apache Parquet 文件:打开、读取与转换
Parquet 的登记扩展名为 .parquet,媒体类型为 application/vnd.apache.parquet。每个行组包含各列的列块;文件尾部的元数据用于定位所需列块,其后是四字节小端元数据长度和结束标记。普通文件以 PAR1 为开头和结尾标记,使用加密页脚的文件使用 PARE 标记。参见 [Apache Parquet 格式说明](https://parquet.apache.org/docs/file-format/)。
先用 PyArrow 读为 Arrow 表,按需用 table.to_pandas() 转成 DataFrame。Parquet 转换成 CSV 时,再通过支持 CSV 导出的工具写出,并检查转换结果是否保留了所需的应用层信息。写回 Parquet 可用 pq.write_table(table, 'output.parquet')。转换和往返保存可能丢失应用层信息:如果创建 Arrow 表时未保留原 pandas 索引,写入 Parquet 后再读取也不会恢复原索引。
怎么打开
在具备 Python 和 PyArrow 的 Windows 或 Mac 电脑上,先执行 import pyarrow.parquet as pq,再执行 table = pq.read_table('file.parquet'),得到 Arrow 表。table.to_pandas() 可转成 pandas DataFrame。只读指定列可用 pq.read_table('file.parquet', columns=['column_name']);按行组读取可用 pq.ParquetFile('file.parquet').read_row_group(0)。这些示例均在电脑上读取本地文件;手机上的文件建议先传到电脑,再按相同步骤读取。
在具备 Python 和 PyArrow 的 Windows 或 Mac 电脑上,先执行 import pyarrow.parquet as pq,再执行 table = pq.read_table('file.parquet'),得到 Arrow 表。table.to_pandas() 可转成 pandas DataFrame。只读指定列可用 pq.read_table('file.parquet', columns=['column_name']);按行组读取可用 pq.ParquetFile('file.parquet').read_row_group(0)。这些示例均在电脑上读取本地文件;手机上的文件建议先传到电脑,再按相同步骤读取。
先用 PyArrow 读为 Arrow 表,按需用 table.to_pandas() 转成 DataFrame。Parquet 转换成 CSV 时,再通过支持 CSV 导出的工具写出,并检查转换结果是否保留了所需的应用层信息。写回 Parquet 可用 pq.write_table(table, 'output.parquet')。转换和往返保存可能丢失应用层信息:如果创建 Arrow 表时未保留原 pandas 索引,写入 Parquet 后再读取也不会恢复原索引。
文件安全
Parquet 不预期包含可执行内容,但可保存任意数据和敏感信息。解析器实现与读取配置仍会影响风险:CVE-2025-46762 涉及 parquet-avro 使用 specific 或 reflect 模型时的任意代码执行,generic 模型不受该漏洞影响;记录建议升级至 1.15.2。这不代表其他风险均已消除。模块化加密可以保留未加密区域,AES CTR 本身也不提供认证,不能仅凭加密或扩展名判断安全性。
来路不明、文件名带两个后缀,或者内容和扩展名对不上——先停下来核对。
转换格式
先用 PyArrow 读为 Arrow 表,按需用 table.to_pandas() 转成 DataFrame。Parquet 转换成 CSV 时,再通过支持 CSV 导出的工具写出,并检查转换结果是否保留了所需的应用层信息。写回 Parquet 可用 pq.write_table(table, 'output.parquet')。转换和往返保存可能丢失应用层信息:如果创建 Arrow 表时未保留原 pandas 索引,写入 Parquet 后再读取也不会恢复原索引。
先复制一份原文件再转换,转完对照看看画质、元数据和排版有没有变。
常见问题
Parquet 文件是什么格式,用来做什么?
Parquet 是保存表格数据的通用二进制列式格式。文件按行组组织,每个行组包含列块,支持由兼容读取器只读取所需列。
Python 如何读取 Parquet 文件?
在可使用 PyArrow 的 Python 环境中,执行 import pyarrow.parquet as pq,再执行 table = pq.read_table('file.parquet')。结果是 Arrow 表,可通过 table.to_pandas() 转成 pandas DataFrame。
Windows 怎么打开 Parquet 文件?
在 Windows 的 Python 环境中使用 PyArrow,执行 pyarrow.parquet.read_table('file.parquet') 读取本地文件,再按需用 to_pandas() 查看为 DataFrame。读取器必须支持该文件使用的编码及其他功能。
Mac 怎么打开 Parquet 文件?
在 Mac 的 Python 环境中使用 PyArrow,执行 pyarrow.parquet.read_table('file.parquet')。若只需要部分列,可添加 columns=['column_name']。能否正确读取取决于读取器对文件所用功能的支持。
手机怎么打开 Parquet 文件?
建议先把文件从手机传到电脑,再用 Python 和 PyArrow 执行 pyarrow.parquet.read_table('file.parquet') 读取。本页不推荐具体手机应用。
Parquet 文件版本不兼容怎么解决?
先核对读取器是否支持文件使用的编码和 Data Page V2。旧读取器可能无法解码新功能;不认识的逻辑类型也可能只返回底层物理类型。应使用支持所需功能的读取器,而不能只根据 .parquet 扩展名判断兼容性。
读取 Parquet 时,整表读取和只读指定列该选哪个?
需要所有列时可读整表;只需要少数字段时,用 PyArrow 的 columns 参数指定列。还可以按行组读取,避免每次读取完整表。选择依据是实际需要的列和行组。
Parquet 怎么转换成 CSV?
先用 PyArrow 读取 Parquet,按需用 to_pandas() 转成 DataFrame,再使用支持 CSV 导出的工具写出。转换后应检查结果,pandas 索引等应用层信息可能无法保留。
Parquet 转 pandas 索引丢失怎么办?
检查最初从 pandas 创建 Arrow 表时是否保留了索引。若当时未保留,写入 Parquet 再读回不会恢复原索引。保存前应确认索引处理方式,读回后对照原 DataFrame 检查。
Parquet 文件解析有哪些安全风险,能直接放心打开吗?
不能仅凭扩展名判断。文件可能含敏感数据,读取器也可能有漏洞。CVE-2025-46762 涉及 parquet-avro 的 specific 和 reflect 读取模式,记录建议升级至 1.15.2;generic 模型不受该特定漏洞影响,但这不等于不存在其他风险。
加密的 Parquet 文件怎么读取,需要先确认什么?
先确认读取器支持文件实际使用的加密功能。模块化加密可分别保护列和页脚,也可让部分数据保持明文。AES CTR 本身不提供认证,因此加密不一定意味着完整的数据完整性保护。
相关格式
资料来源
IANA — application/vnd.apache.parquet · IANA 官方媒体类型登记
Apache Parquet — File Format · Apache Parquet 官方格式文档
Apache Arrow — Reading and Writing Single Files · Apache Arrow 官方使用文档
Apache Parquet — Parquet format versions · Apache Parquet 官方兼容性文档
CVE-2025-46762 · CVE 官方漏洞记录;分配机构为 Apache Software Foundation
Apache Parquet — Modular Encryption · Apache Parquet 官方加密规范