一、什么是 Apache Arrow?
Apache Arrow 是一个开源的跨语言开发平台,专注于在内存中处理列式数据。它定义了一种标准化的内存格式,使得不同系统和编程语言之间可以零拷贝地共享数据,从而极大提升数据交换的效率。
Arrow 的核心特点包括:
- 列式内存布局:数据按列存储,适合向量化计算和分析型工作负载。
- 语言无关性:支持 C++, Java, Python, JavaScript, Rust 等多种语言。
- 零拷贝共享:多个进程或系统可以直接访问同一块内存中的数据,无需序列化/反序列化。
- 高性能:避免了传统数据交换中昂贵的 I/O 和转换开销。
二、什么是 PyArrow?
PyArrow 是 Apache Arrow 在 Python 中的实现,提供了对 Arrow 内存模型的完整封装。它不仅是一个数据结构库,还是连接 Python 生态与外部系统(如 Parquet 文件、数据库、Spark、Dask 等)的桥梁。
PyArrow 的主要目标是:
- 提供高效的内存数据结构(如
Array、ChunkedArray、RecordBatch、Table)。 - 支持快速读写列式存储格式(如 Parquet、Feather)。
- 实现与其他系统的无缝集成(如 Pandas、NumPy、Spark、Polars)。
- 加速数据序列化与反序列化过程。
三、PyArrow 的核心数据结构
PyArrow 定义了一系列高效的数据结构,这些结构构成了其功能的基础:
1. Array
表示一个不可变的、同类型的列数据。例如:
import pyarrow as pa
arr = pa.array([1, 2, 3, None, 5])
print(arr)
# 输出:[1, 2, 3, null, 5]
2. ChunkedArray
由多个 Array 组成,适用于处理大规模数据流或分块加载的数据。
3. RecordBatch
类似于一行数据的集合,常用于流式处理。它包含多个列,每列是一个 Array。
batch = pa.record_batch(
[pa.array(['Alice', 'Bob']), pa.array([25, 30])],
names=['name', 'age']
)
4. Table
相当于一个二维表,由多个 或列组成,类似于 Pandas DataFrame,但基于 Arrow 格式。


