如何将超大型数组保存到许多小文件中?

时间:2016-09-16 14:42:23

标签: python numpy filesystems hdf5 pytables

在linux 64bit环境中,我有一个非常大的float64阵列(单个将是500GB到1TB)。我想用统一的方式在numpy中访问这些数组:a [x:y]。所以我不希望逐个文件地访问数组。有没有可以在许多不同文件上创建memmap的工具? hdf5或pytables可以将单个CArray存储到许多小文件中吗?也许类似于fileInput的东西?或者我可以使用文件系统来模拟单个文件吗?

在matlab中,我一直在使用H5P.set_external来做这件事。然后我可以创建一个原始数据集并将其作为一个大的原始文件进行访问。但我不知道我是否可以在python中创建这些数据集的numpy.ndarray。或者我可以在许多小型hdf5文件上传播单个数据集吗?

并且不幸的是H5P.set_chunk不能与H5P.set_external一起使用,因为set_external只能用于连续数据类型而不是chunked数据类型。

一些相关主题: Chain datasets from multiple HDF5 files/datasets

2 个答案:

答案 0 :(得分:1)

我会用hdf5。在h5py中,您可以指定一个块大小,这样可以有效地检索数组的小块:

http://docs.h5py.org/en/latest/high/dataset.html?#chunked-storage

答案 1 :(得分:1)

您可以使用daskdask arrays允许您创建一个行为类似于单个大numpy数组的对象,但表示存储在many small HDF5 files中的数据。 dask将负责确定您执行的任何操作如何与您的基础磁盘数据相关。