python3中pyarrow库介绍和基础使用

张开发
2026/4/5 5:53:28 15 分钟阅读

分享文章

python3中pyarrow库介绍和基础使用
目录一、什么是 Apache Arrow 和 PyArrow二、为什么 PyArrow 很重要三、安装 PyArrow四、PyArrow 核心数据结构五、PyArrow Array最基础六、PyArrow Table最常用创建 Table查看 schema访问列七、与 pandas 的互转pandas → arrowarrow → pandas八、读写 Parquet 文件什么是 Apache Parquet写 Parquet读 Parquet九、Feather 格式十、RecordBatch十一、内存映射超高性能十二、典型应用场景1 数据湖2 AI / 机器学习3 大数据交换4 高性能数据分析十三、一个完整示例十四、PyArrow 的生态位置非常重要十五、一句话总结一、什么是 Apache Arrow 和 PyArrowPyArrow是Apache Arrow在 Python 中的官方实现库。Apache Arrow是一个高性能列式内存数据格式columnar in-memory format主要用于高速数据分析跨语言数据交换大数据系统之间共享数据支持语言包括PythonCJavaRustGoR因此 Arrow 常作为数据系统之间的“通用内存格式”。很多数据框架都依赖 Arrow例如pandasApache SparkDuckDBPolarsDask二、为什么 PyArrow 很重要传统 Python 数据处理CSV → pandas → numpy存在问题内存拷贝多跨语言困难数据序列化慢Arrow 的特点特性说明列式存储更适合分析计算零拷贝zero-copy减少数据复制跨语言共享Python/C/Java高性能 IOParquet / Feather所以在AI、大数据、数据湖中非常常见。三、安装 PyArrowpipinstallpyarrow或者condainstallpyarrow验证importpyarrowaspaprint(pa.__version__)四、PyArrow 核心数据结构PyArrow 主要有三个核心结构Array Table RecordBatch关系Array - 一列 RecordBatch - 一批行 Table - 多个batch组合五、PyArrow Array最基础创建 Arrow 数组importpyarrowaspa arrpa.array([1,2,3,4])print(arr)输出[ 1, 2, 3, 4 ]指定类型arrpa.array([1,2,3],typepa.int64())常见类型pa.int32() pa.int64() pa.float32() pa.float64() pa.string() pa.bool_() pa.timestamp()六、PyArrow Table最常用类似pandas DataFrame创建 Tableimportpyarrowaspa data{id:[1,2,3],name:[Alice,Bob,Charlie]}tablepa.table(data)print(table)输出pyarrow.Table id: int64 name: string查看 schemaprint(table.schema)结果id: int64 name: string访问列table.column(id)七、与 pandas 的互转这是最常见用途。pandas → arrowimportpandasaspdimportpyarrowaspa dfpd.DataFrame({a:[1,2,3],b:[4,5,6]})tablepa.Table.from_pandas(df)arrow → pandasdftable.to_pandas()优势零拷贝更省内存八、读写 Parquet 文件Arrow 的重要能力之一是Parquet 支持。什么是 Apache ParquetParquet 是一种列式存储压缩率高适合数据分析写 Parquetimportpyarrow.parquetaspq pq.write_table(table,data.parquet)读 Parquettablepq.read_table(data.parquet)转换为 pandasdfpq.read_table(data.parquet).to_pandas()九、Feather 格式另一个 Arrow 格式Apache Feather特点极快用于 Python / R 交换数据写入importpyarrow.featherasfeather feather.write_feather(df,data.feather)读取dffeather.read_feather(data.feather)十、RecordBatchRecordBatch 一组行适合流式处理IPC批量计算创建batchpa.record_batch([pa.array([1,2,3]),pa.array([a,b,c])],names[id,name])十一、内存映射超高性能Arrow 支持memory map。withpa.memory_map(data.arrow,r)assource:readerpa.ipc.open_file(source)tablereader.read_all()优点不加载整个文件直接访问内存十二、典型应用场景PyArrow 常见用途1 数据湖例如S3 ├── data1.parquet ├── data2.parquet查询SparkDuckDBPandas2 AI / 机器学习HuggingFaceHugging Face Datasets底层就是 Arrow。3 大数据交换例如Python → Spark → Java用 Arrow 共享内存。4 高性能数据分析配合PolarsDuckDB速度远快于 pandas。十三、一个完整示例importpandasaspdimportpyarrowaspaimportpyarrow.parquetaspq# 创建 pandasdfpd.DataFrame({id:[1,2,3],score:[90,85,88]})# pandas - arrowtablepa.Table.from_pandas(df)# 写 parquetpq.write_table(table,score.parquet)# 读取 parquettable2pq.read_table(score.parquet)# arrow - pandasdf2table2.to_pandas()print(df2)十四、PyArrow 的生态位置非常重要现代数据栈Spark │ DuckDB ── Arrow ── Pandas │ Polars │ HuggingFaceArrow 是中间层标准格式。十五、一句话总结PyArrow Python 访问 Apache Arrow 的接口主要作用1️⃣ 高性能列式数据结构2️⃣ Parquet / Feather 文件读写3️⃣ Pandas 加速4️⃣ 跨语言数据共享

更多文章