当前位置: 首页 > news >正文

python3中pyarrow库介绍和基础使用

目录

  • 一、什么是 Apache Arrow 和 PyArrow
  • 二、为什么 PyArrow 很重要
  • 三、安装 PyArrow
  • 四、PyArrow 核心数据结构
  • 五、PyArrow Array(最基础)
  • 六、PyArrow Table(最常用)
      • 创建 Table
      • 查看 schema
      • 访问列
  • 七、与 pandas 的互转
      • pandas → arrow
      • arrow → pandas
  • 八、读写 Parquet 文件
      • 什么是 Apache Parquet
      • 写 Parquet
      • 读 Parquet
  • 九、Feather 格式
  • 十、RecordBatch
  • 十一、内存映射(超高性能)
  • 十二、典型应用场景
      • 1 数据湖
      • 2 AI / 机器学习
      • 3 大数据交换
      • 4 高性能数据分析
  • 十三、一个完整示例
  • 十四、PyArrow 的生态位置(非常重要)
  • 十五、一句话总结

一、什么是 Apache Arrow 和 PyArrow

PyArrowApache Arrow在 Python 中的官方实现库。

Apache Arrow是一个高性能列式内存数据格式(columnar in-memory format),主要用于:

  • 高速数据分析
  • 跨语言数据交换
  • 大数据系统之间共享数据

支持语言包括:

  • Python
  • C++
  • Java
  • Rust
  • Go
  • R

因此 Arrow 常作为数据系统之间的“通用内存格式”

很多数据框架都依赖 Arrow,例如:

  • pandas
  • Apache Spark
  • DuckDB
  • Polars
  • Dask

二、为什么 PyArrow 很重要

传统 Python 数据处理:

CSV → pandas → numpy

存在问题:

  • 内存拷贝多
  • 跨语言困难
  • 数据序列化慢

Arrow 的特点:

特性说明
列式存储更适合分析计算
零拷贝(zero-copy)减少数据复制
跨语言共享Python/C++/Java
高性能 IOParquet / Feather

所以在AI、大数据、数据湖中非常常见。


三、安装 PyArrow

pipinstallpyarrow

或者

condainstallpyarrow

验证:

importpyarrowaspaprint(pa.__version__)

四、PyArrow 核心数据结构

PyArrow 主要有三个核心结构:

Array Table RecordBatch

关系:

Array -> 一列 RecordBatch -> 一批行 Table -> 多个batch组合

五、PyArrow Array(最基础)

创建 Arrow 数组:

importpyarrowaspa arr=pa.array([1,2,3,4])print(arr)

输出:

[ 1, 2, 3, 4 ]

指定类型:

arr=pa.array([1,2,3],type=pa.int64())

常见类型:

pa.int32() pa.int64() pa.float32() pa.float64() pa.string() pa.bool_() pa.timestamp()

六、PyArrow Table(最常用)

类似pandas DataFrame

创建 Table

importpyarrowaspa data={"id":[1,2,3],"name":["Alice","Bob","Charlie"]}table=pa.table(data)print(table)

输出:

pyarrow.Table id: int64 name: string

查看 schema

print(table.schema)

结果:

id: int64 name: string

访问列

table.column("id")

七、与 pandas 的互转

这是最常见用途

pandas → arrow

importpandasaspdimportpyarrowaspa df=pd.DataFrame({"a":[1,2,3],"b":[4,5,6]})table=pa.Table.from_pandas(df)

arrow → pandas

df=table.to_pandas()

优势:

  • 零拷贝
  • 更省内存

八、读写 Parquet 文件

Arrow 的重要能力之一是Parquet 支持

什么是 Apache Parquet

Parquet 是一种:

  • 列式存储
  • 压缩率高
  • 适合数据分析

写 Parquet

importpyarrow.parquetaspq pq.write_table(table,"data.parquet")

读 Parquet

table=pq.read_table("data.parquet")

转换为 pandas:

df=pq.read_table("data.parquet").to_pandas()

九、Feather 格式

另一个 Arrow 格式:

Apache Feather

特点:

  • 极快
  • 用于 Python / R 交换数据

写入:

importpyarrow.featherasfeather feather.write_feather(df,"data.feather")

读取:

df=feather.read_feather("data.feather")

十、RecordBatch

RecordBatch = 一组行

适合:

  • 流式处理
  • IPC
  • 批量计算

创建:

batch=pa.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:reader=pa.ipc.open_file(source)table=reader.read_all()

优点:

  • 不加载整个文件
  • 直接访问内存

十二、典型应用场景

PyArrow 常见用途:

1 数据湖

例如:

S3 ├── data1.parquet ├── data2.parquet

查询:

  • Spark
  • DuckDB
  • Pandas

2 AI / 机器学习

HuggingFace:

  • Hugging Face Datasets

底层就是 Arrow。


3 大数据交换

例如:

Python → Spark → Java

用 Arrow 共享内存。


4 高性能数据分析

配合:

  • Polars
  • DuckDB

速度远快于 pandas。


十三、一个完整示例

importpandasaspdimportpyarrowaspaimportpyarrow.parquetaspq# 创建 pandasdf=pd.DataFrame({"id":[1,2,3],"score":[90,85,88]})# pandas -> arrowtable=pa.Table.from_pandas(df)# 写 parquetpq.write_table(table,"score.parquet")# 读取 parquettable2=pq.read_table("score.parquet")# arrow -> pandasdf2=table2.to_pandas()print(df2)

十四、PyArrow 的生态位置(非常重要)

现代数据栈:

Spark │ DuckDB ── Arrow ── Pandas │ Polars │ HuggingFace

Arrow 是中间层标准格式


十五、一句话总结

PyArrow = Python 访问 Apache Arrow 的接口

主要作用:

1️⃣ 高性能列式数据结构
2️⃣ Parquet / Feather 文件读写
3️⃣ Pandas 加速
4️⃣ 跨语言数据共享

http://www.jsqmd.com/news/571847/

相关文章:

  • 3步让Fiji在macOS上稳定运行:从启动崩溃到顺畅启动的完整指南
  • SingleFile:保存完整网页的终极解决方案
  • Lingbot-Depth-Pretrain-Vitl-14 在医疗影像的潜在应用:手术场景深度感知辅助
  • 3步突破AI编程助手限制:免费解锁Cursor Pro高级功能全指南
  • AutoGen Studio在内容创作领域的应用:自动化文案生成
  • 告别游戏本性能枷锁:OmenSuperHub的硬件轻控方案
  • 教程创作加速器:用快马平台秒建Vue3项目原型,专注编写安装指南
  • 2026年,探寻市场口碑佳的高压电磁阀靠谱工厂
  • 树莓派新手必看:保姆级vim安装与配置指南(含国内源切换和常见报错解决)
  • 企业数据安全新选择:手把手教你用Open Notebook搭建私有知识库,支持PDF/Word多格式导入
  • 在QT中将多个项目(同代码不同ui和资源文件)合并
  • DeepSeek-Coder-V2:打破闭源垄断,开启开源代码智能新时代的终极指南
  • SpringSecurity多认证方案配置实战:DelegatingAuthenticationEntryPoint的灵活运用
  • 我爱学算法之——动态规划(三)
  • 【Openlayers】突破天地图缩放限制:自定义TileGrid实现18级以上影像平滑展示
  • 5个Reloadium高级调试技巧:帧重载、错误处理和闭包调试终极指南
  • 2026年行业推荐的几个高品质柔性无尘拖链品牌厂家榜单
  • w3x2lni:魔兽地图跨版本兼容解决方案技术指南
  • HoRain云--Vue3样式绑定终极指南
  • JetBrains IDE试用期管理工具:技术解析与实践指南
  • 从社区到家庭,这几个比较好用的健康一体机厂家值得关注 - 品牌2026
  • 补题--25届acm校队训练赛
  • Electron视频播放器开发实战:如何用FFmpeg实现非MP4格式的HTTP推流(附完整代码)
  • LearnDataScience K-Means聚类教程:数据分组的终极指南
  • DFT笔记34
  • 推荐一家靠谱的南通停车管理系统 无线覆盖 监控安装的公司 - LYL仔仔
  • MediaPipe Pose镜像体验:CPU也能毫秒级检测,无需GPU免配置
  • 音频基础知识
  • 3分钟学会RPG Maker资源解密:新手也能轻松提取游戏素材的完整指南
  • Seelen-UI插件生态:打造Windows桌面效率革命与个性化体验