Zarr 用于大数组持久化
现实中存在的一些最大的数据集并不是异构的表格数据帧,而是多维同构数组。因此,高效地存储这些较大的数组非常重要。
Zarr 允许我们使用不同的后端和不同的编码格式高效地存储同构的多维数组。像并发写入这样的功能可以非常有效地生成数据。
存在着一些非常成熟的表示数组数据的标准(例如 NetCDF 和 HDF5),但在这个案例中,我们将使用新兴的格式 Zarr。Zarr 在优化方面比其他任何格式都要好,对于高效处理非常有用。例如,它允许并发写入和不同的文件结构组织,这两者都可以对性能产生巨大影响。并发写入允许许多并行进程同时在同一结构上工作。不同的文件结构使我们能够利用文件系统的性能特性。
虽然 Zarr 是一种文件格式,但它始于 Python 空间,由一个名为 Zarr 的库实现。因此,您可以确信 Python 版本实现了该格式的所有主要功能。如果您计划使用其他编程语言的 Zarr 文件,您应该首先检查这些语言的库是否支持这些功能。在某种程度上,Zarr 与 Parquet 相反:Parquet 是从 Java 生态系统迁移到 Python 的,因此 Python 对 Parquet 的支持仍然不全面。对于 Zarr,Python 实现是金标准。
Zarr 起源于生物信息学领域,我们将使用一个生物信息学示例。我们将使用来自一个名为 HapMap 的旧基因组项目的数据(www.genome.gov/10001688/international-hapmap-project)。该项目为人类群体中的许多个体的基因组变异(DNA 字母的变化)提供了信息。你不需要了解这个练习中的任何科学细节。我们将随着我们的进展介绍所需的最小概念。
对于我们的示例,我们将从一个预先准备好的 Zarr 数据库开始,该数据库是我从 Plink 格式的 HapMap 数据生成的(www.cog-genomics.org/plink/2.0/)。你不需要担心原始格式,但如果你对它感兴趣并且为了完整性,你可以在08-persistence/sec4-zarr/hapmap 仓库中找到生成你应使用的 Zarr 数据库的代码。预先准备好的 Zarr 文件可以在tiago.org/db.zarr.tar.gz找到。它包括跨越几个人类群体的 210 个个体的遗传信息。
我们的一个目标将是生成另一个 Zarr 数据库,可以用于执行主成分分析(PCA)——在基因组学中常见的无监督机器学习技术——这将需要重新格式化我们从原始数据库中拥有的数据。我们不会在这里运行 PCA,但只是为该操作准备文件。