技能zarr-python
Z

zarr-python

用于云存储的分块 N 维数组(Zarr-Python 3)。压缩数组、并行 I/O,通过 fsspec 支持 S3/GCS,可与 NumPy/Dask/Xarray 兼容,面向大规模科学计算流水线。

zarr-python - 云原生大规模数组存储解决方案

技能概述

zarr-python 是处理大规模多维数组的 Python 技能,通过分块存储和压缩技术实现高效的并行 I/O,支持 S3、GCS 等云存储后端,与 NumPy、Dask、Xarray 无缝集成,适用于科学计算、气象分析和地理空间数据处理场景。

适用场景

1. 大规模科学计算数据处理

适用于气候模拟、基因组学、物理模拟等产生 TB 到 PB 级数组的科学计算场景。通过分块存储和压缩,显著降低存储成本,同时保持快速的数据访问性能。支持 Dask 并行计算,能够处理超过内存容量的数据集。

2. 云原生数据管道

专为 S3、GCS 等云存储优化的数组格式,支持 fsspec 统一存储接口。通过合并元数据和分片优化,减少云存储 API 调用次数,提高云端数据访问效率。适合需要将数据存储在云端并进行分布式处理的场景。

3. 时间序列和地理空间数据

适合存储随时间累积的观测数据(如卫星影像、气象站数据、传感器数据)。支持高效的时间维度追加操作,与 Xarray 集成提供带坐标标注的多维数组操作,符合 NetCDF 用户的使用习惯。

核心功能

1. 灵活的分块存储与压缩

提供可配置的分块策略,支持矩形分块和非均匀分块,可根据数据访问模式优化分块形状。集成 Blosc、Zstandard、Gzip 等多种压缩算法,支持数据重排过滤器(如 bitshuffle),在保持读取性能的同时显著减少存储空间占用。

2. 多后端存储支持

支持本地文件系统、内存存储、ZIP 文件,以及通过 fsspec 接口的 S3、GCS、HTTP 等云存储后端。提供统一的 API 接口,数据可在不同存储后端间无缝迁移。支持合并元数据功能,优化云存储环境下的元数据访问性能。

3. NumPy/Dask/Xarray 生态集成

完全兼容 NumPy 数组接口,可直接使用 NumPy 函数操作。通过 Dask 实现懒加载和并行计算,支持超过内存容量的大型数组处理。与 Xarray 深度集成,提供带维度名称和坐标标注的操作体验,适合处理带时间、空间坐标的科学数据。

常见问题

zarr-python 支持哪些 Python 版本?

当前稳定版 zarr-python 3.2.1 需要 Python 3.12 或更高版本,以及 NumPy 2.0+。对于需要使用 Python 3.10-3.11 的项目,需要使用 Zarr-Python 2.x 版本。云存储功能需要安装 zarr[remote] 扩展,并配合特定版本的 s3fs 或 gcsfs 后端。

如何选择合适的分块大小?

建议单个分块大小控制在 1-10 MB 之间。对于 float32 数据,1 MB 约等于 512×512 的数组。分块形状应根据数据访问模式调整:频繁按行访问时分块应跨越列维度,频繁按列访问时分块应跨越行维度,随机访问可选择均衡的方形分块。不当的分块选择可能导致性能降低数十倍。

zarr 适合存储多大规模的数据?

zarr 设计用于处理从 GB 到 PB 级别的数据集。理论上支持受文件系统或云存储限制的任意大小数组。实际性能取决于分块策略、压缩配置和存储后端。对于包含数百万小分块的超大型数组,建议启用分片(sharding)功能来合并分块,减少文件系统开销并提高云存储性能。