新闻详情

新闻详情

首页 / 资讯中心 / 详情

PyArrow 读写 Parquet 文件时如何只读取部分列并控制写入选项

发布时间:2026/9/14 11:44:48来源:尧图网络
PyArrow 读写 Parquet 文件时如何只读取部分列并控制写入选项
PyArrow 读写 Parquet 文件时如何只读取部分列并控制写入选项【免费下载链接】arrowApache Arrow is the universal columnar format and multi-language toolbox for fast data interchange and in-memory analytics项目地址: https://gitcode.com/GitHub_Trending/arrow3/arrow用 PyArrow 处理 Parquet 文件时一个常见需求是文件里有几十列但当前任务只需要其中几列同时希望写入时能控制格式版本、压缩、数据页大小等选项而不是完全依赖默认值。本文基于 Apache Arrow 官方文档中的 PyArrow Parquet 章节docs/source/python/parquet/parquet.rst演示如何用pq.write_table写文件、用columns参数只读取部分列并在写入时控制常用选项最后通过文件元数据核对写入结果。准备环境按 Parquet 概览文档 的说明通过 pip 或 conda 安装的pyarrow默认自带 Parquet 支持能直接执行下面的验证 import pyarrow.parquet as pq如果从源码构建则必须在编译 C 库时使用-DARROW_PARQUETON并在构建 pyarrow 时启用 Parquet 扩展。下面所有示例沿用文档中的数据构造一张三列表 import numpy as np import pandas as pd import pyarrow as pa df pd.DataFrame({one: [-1, np.nan, 2.5], ... two: [foo, bar, baz], ... three: [True, False, True]}, ... indexlist(abc)) table pa.Table.from_pandas(df)写入文件并只读取部分列先写一个完整的 Parquet 文件 import pyarrow.parquet as pq pq.write_table(table, example.parquet)读取时把要保留的列名传给columns参数即可只解码这些列。文档指出由于列式布局读列子集通常比读整个文件快得多 pq.read_table(example.parquet, columns[one, three]) pyarrow.Table one: double three: bool ---- one: [[-1,null,2.5]] three: [[true,false,true]]上面的输出是文档示例结果。注意如果源数据来自 pandas 且带 index用read_table读列子集时会丢掉 index 信息需要用read_pandas才能保留 index 列 pq.read_pandas(example.parquet, columns[two]).to_pandas() two a foo b bar c baz读文件的位置参数不必是路径字符串文档说明它可以是字符串文件路径PyArrow 的NativeFile对象Python file 对象。性能上文档的结论是Python file 对象读性能最差字符串路径或NativeFile尤其是内存映射表现最好。大文件用 iter_batches 限制列与 row group对大文件ParquetFile.iter_batches以RecordBatch序列流式读取而不是把整个文件载入一张表。batch_size控制每批最大行数row_groups和columns参数可以限定读哪些 row group 和列 parquet_file pq.ParquetFile(example.parquet) for batch in parquet_file.iter_batches(batch_size2): ... print(batch.num_rows) 2 1输出是文档示例。读取函数默认多线程并行读列可用use_threadsFalse关闭线程数由 Arrow 自动推断可用pa.cpu_count()查看。控制写入选项pq.write_table()提供多个控制写入行为的选项文档逐项给出了用途versionParquet 格式版本。1.0保证与旧版本读取端兼容2.4及以上启用更多 Parquet 类型和编码。data_page_size控制列 chunk 内编码后数据页的大约大小当前默认 1MB。max_rows_per_page限制列 chunk 内每个数据页的行数默认 20000。较小的值会降低读取时的内存占用代价是更多页元数据。flavor设置特定 Parquet 消费方的兼容选项如flavorspark会针对 Apache Spark 自动设置选项并清理 Spark SQL 不支持的字段字符。sorting_columns以SortingColumn对象序列把各 row group 数据的排序顺序记入元数据。写入器不会真正排序数据也不校验数据是否有序读取端可利用该元数据优化查询。几个常用写入示例均出自文档 pq.write_table(table, example.parquet, use_dictionaryFalse) pq.write_table(table, example.parquet, compressionsnappy) pq.write_table(table, example.parquet, compressiongzip)关于压缩与编码文档的说明是use_dictionary控制是否使用字典编码。多数 Parquet 实现写入时使用字典编码字典过大时回退到 plain 编码。数据页在编码之后会被压缩默认使用 Snappy也支持 Brotli、Gzip、ZSTD、LZ4 和不压缩。lz4_raw是lz4的别名两者都使用 Parquet 规范定义的 LZ4_RAW 编解码器。Snappy 通常性能更好Gzip 可能得到更小的文件。压缩和字典编码可以按列设置 pq.write_table(table, example.parquet, compression{one: snappy, two: gzip}, ... use_dictionary[one, two])写入 pandas 数据时省略 indexpa.Table.from_pandas默认会添加一列或多列特殊列来记录 DataFrame 的 index行标签。存储 index 会占额外空间如果 index 没有保留价值转换时传preserve_indexFalse table pa.Table.from_pandas(df, preserve_indexFalse) pq.write_table(table, example_noindex.parquet) t pq.read_table(example_noindex.parquet) t.to_pandas() one two three 0 -1.0 foo True 1 NaN bar False 2 2.5 baz True文档说明可以看到 index 没有经过往返保留读回的 index 是默认的 0、1、2。验证写入结果检查文件元数据写入后可以用元数据核对文件是否符合预期。两种入口ParquetFile.metadata和pq.read_metadata。 parquet_file pq.ParquetFile(example.parquet) metadata pq.read_metadata(example.parquet) metadata pyarrow._parquet.FileMetaData object at ... created_by: parquet-cpp-arrow version ... num_columns: 4 num_rows: 3 num_row_groups: 1 format_version: 2.6 serialized_size: ...以上为文档示例输出其中num_columns、num_rows、num_row_groups是实际数值created_by、serialized_size等以...省略的部分每次运行会不同。进一步可以下钻到 row group 和列 chunk 级别查看统计信息与压缩方式 metadata.row_group(0) pyarrow._parquet.RowGroupMetaData object at ... num_columns: 4 num_rows: 3 total_byte_size: 290 sorting_columns: () metadata.row_group(0).column(0) pyarrow._parquet.ColumnChunkMetaData object at ... ... physical_type: DOUBLE num_values: 3 path_in_schema: one is_stats_set: True statistics: ... min: -1.0 max: 2.5 null_count: 1 compression: SNAPPY encodings: (PLAIN, RLE, RLE_DICTIONARY)同样是文档示例输出。这里可以看到one列的统计min/max/null_count、实际使用的压缩SNAPPY和编码可以用来确认压缩和字典编码选项是否生效写入 Bloom filter 后也可以在这里确认。限制与适用边界文档中几点需要留意的边界write_page_index会写入 page index但文档明确 PyArrow 读取端目前还不使用 page indexwrite_page_checksum需配合读取时的page_checksum_verificationTrue才能检测数据损坏。sorting_columns只记录排序顺序不做排序和校验。Parquet 数据需要从磁盘解码解压无法直接内存映射因此memory_mapTrue在某些系统上可能性能更好但对常驻内存消耗帮助不大。如果要处理超过内存大小的 Parquet 数据文档指向 dataset 和分区方案而不是单个文件的读取接口。完成上述操作后你可以用pq.read_metadata输出的num_columns、num_row_groups和列 chunk 的compression、encodings字段确认列子集读取和写入选项都已按预期落地。【免费下载链接】arrowApache Arrow is the universal columnar format and multi-language toolbox for fast data interchange and in-memory analytics项目地址: https://gitcode.com/GitHub_Trending/arrow3/arrow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Autoware 版本怎么选?从固定清单到每日构建的实操讲解 2026/9/14 12:23:56

Autoware 版本怎么选?从固定清单到每日构建的实操讲解

Autoware 版本怎么选?从固定清单到每日构建的实操讲解 【免费下载链接】autoware Autoware - the worlds leading open-source software project for autonomous driving 项目地址: https://gitcode.com/GitHub_Trending/au/autoware Autoware 版本选择的入口…

阅读更多 →
基于SpringBoot的餐饮点餐收银系统的设计与实现 2026/9/14 12:23:56

基于SpringBoot的餐饮点餐收银系统的设计与实现

一、项目背景与意义随着餐饮行业的快速发展,传统的人工点餐和收银方式逐渐暴露出效率低、易出错、数据统计困难等问题。尤其在用餐高峰期,服务员需要同时处理多桌顾客的点餐、加菜、结账等操作,容易出现漏单、错单的情况,严重影响…

阅读更多 →
WeChatMsg 完整指南:导出微信聊天记录并生成年度聊天报告 2026/9/14 12:23:56

WeChatMsg 完整指南:导出微信聊天记录并生成年度聊天报告

WeChatMsg 完整指南:导出微信聊天记录并生成年度聊天报告 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/We…

阅读更多 →
五级流水线CPU的Verilog实现:数据通路、冒险处理与仿真验证 2026/9/14 12:23:56

五级流水线CPU的Verilog实现:数据通路、冒险处理与仿真验证

简介:一套面向计算机体系结构学习者的流水线CPU设计资料,以Verilog HDL实现取指、译码、执行、访存、写回五个阶段,并处理数据冒险、控制冒险与资源冲突等典型问题,涉及转发路径与分支预测机制。压缩包约27.49MB,内容以…

阅读更多 →
基于Spring Boot的学士服租赁系统设计与实现:技术栈、背景意义与核心代码 2026/9/14 12:23:56

基于Spring Boot的学士服租赁系统设计与实现:技术栈、背景意义与核心代码

1. 项目背景与意义每年毕业季,大量高校毕业生需要在毕业典礼、学位授予仪式和合影留念等场合穿着学士服。然而,学士服使用频率低、购买成本高、存放占用空间大,绝大多数学生不会选择自行购买。传统模式下,学生往往通过班级统一组织…

阅读更多 →
从搜索意图到精准流量:SEO持续获客的五个关键维度 2026/9/14 12:20:55

从搜索意图到精准流量:SEO持续获客的五个关键维度

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞