对比
Arrow 与 Zarr 的区别
Apache Arrow 规定与语言无关的内存列式格式及数据交换序列化方式。Zarr 将N维数组拆为数据块和元数据,并存放在存储中。
应该选择哪种格式?
在分析进程间以内存方式传递表格数据时选 Arrow,条件允许时可零拷贝。需要持久保存大型数组并按块读取时可考虑 Zarr。Arrow IPC 与 Arrow 内存格式有关联,但并非同一概念。
适用于 Apache Arrow IPC
在兼容的程序和语言之间交换列式表格数据 · 在支持 Arrow 的工具之间传递分析数据集
- 在 Arrow 库和分析引擎之间移动带类型的数据
- 在 IPC 文件版中随机访问记录批次
适用于 Zarr
分块保存大型多维数组 · 处理云对象存储中的科学数据
- 高效读取大型数组的指定区域
- 在兼容工具间共享分片数据
基本信息
| 项目 | Apache Arrow IPC | Zarr |
|---|---|---|
| 扩展名 | .arrow, .feather, .arrows | .zarr |
| MIME 类型 | application/vnd.apache.arrow.file, application/vnd.apache.arrow.stream | |
| 常见用途 | 在兼容的程序和语言之间交换列式表格数据 · 在支持 Arrow 的工具之间传递分析数据集 | 分块保存大型多维数组 · 处理云对象存储中的科学数据 |
| 打开方式 | 使用 Apache Arrow 库或支持 Arrow IPC 的分析工具读取。.arrow 通常表示文件版,.arrows 通常表示流版,但应确认接收工具所需的 IPC 模式和压缩编解码器。处理 Feather 文件时,也要确认其与旧版 Feather V1 的兼容性。 | 使用支持Zarr的库或分析工具。检查版本、数组形状、分块网格、codec和属性;保留整个本地目录或所需对象键,并参考创建者文档。 |
| 导出或转换 | Parquet 可用于分析数据存储和分发;CSV 适用于简单表格交换。转换可能改变或丢失 Arrow 专有类型、嵌套结构、字典编码或压缩设置。请确认所需类型和精度,并保留源数据。 | 从netCDF或HDF5转换时,检查维度、类型、分块、属性和坐标约定映射。保留原始数据,并在转换后验证数值。 |
按用途选择
在 Arrow 库和分析引擎之间移动带类型的数据
在兼容的程序和语言之间交换列式表格数据 · 在支持 Arrow 的工具之间传递分析数据集
Apache Arrow IPC在 IPC 文件版中随机访问记录批次
在兼容的程序和语言之间交换列式表格数据 · 在支持 Arrow 的工具之间传递分析数据集
Apache Arrow IPC高效读取大型数组的指定区域
分块保存大型多维数组 · 处理云对象存储中的科学数据
Zarr在兼容工具间共享分片数据
分块保存大型多维数组 · 处理云对象存储中的科学数据
Zarr关键点 1
Arrow 定义内存列式布局及序列化/传输;Zarr 定义数组节点的shape、类型、块网格、codec、元数据和块存储。
进一步了解差异关键点 2
Arrow 使用适合共享内存的缓冲区和子数组;Zarr 将独立编码的数据块保存下来以支持局部读取。
进一步了解差异进一步了解差异
内存列式交换和兼容IPC流程适合用 Arrow;持久化分块数组适合用 Zarr。明确选择持久化容器,并核对类型、时间戳、维度和访问模式。
- Arrow 主要规定内存表示和序列化;Zarr 描述数组元数据及分别存储的数据块。
- Arrow数组使用缓冲区和嵌套子数组;Zarr块可独立编码和读取。
- 持久化或转换时需说明使用Arrow IPC还是其他文件格式,并核对类型、空值、时间戳单位和时区、数组shape与轴含义、codec及块访问方式。
常见问题
Arrow 数组本身就是类似 Zarr 的持久存储吗?
不是。Arrow主要面向内存与序列化,持久化需指定IPC或其他容器;Zarr则将数组块与元数据保存在存储中。