用h5py增量写入hdf5

问题描述 投票:22回答:2

我有一个关于如何最好地使用python / h5py写入hdf5文件的问题。

我有类似的数据:

-----------------------------------------
| timepoint | voltage1 | voltage2 | ...
-----------------------------------------
| 178       | 10       | 12       | ...
-----------------------------------------
| 179       | 12       | 11       | ...
-----------------------------------------
| 185       | 9        | 12       | ...
-----------------------------------------
| 187       | 15       | 12       | ...
                    ...

具有约10 ^ 4列和约10 ^ 7行。 (这大约是10 ^ 11(1000亿个)元素,或〜100GB(1字节整数)。

[使用此数据,通常的用途是一次写入,多次读取,并且典型的读取情况是获取列1和另一列(例如254),将这两列都加载到内存中,并进行一些统计”。 >

我认为一个好的hdf5结构将使上表中的每一列成为hdf5组,从而得到10 ^ 4组。这样,我们将不需要将所有数据读入内存,是吗? hdf5结构尚未定义,因此可以是任何东西。

现在的问题是:我一次接收到约10 ^ 4行的数据(并且每次接收的行数不完全相同),并且需要将其递增地写入hdf5文件。我该如何写文件?

我正在考虑使用python和h5py,但如果推荐的话,可以使用其他工具。正在大步前进,例如

dset = f.create_dataset("voltage284", (100000,), maxshape=(None,), dtype='i8', chunks=(10000,))

然后当另一个10 ^ 4行的块到达时,替换数据集?

或者仅将10 ^ 4行的每个块存储为单独的数据集会更好吗?还是我真的需要知道最终的行数? (很难获得,但是可能)。

我也可以对hdf5保释,如果它也不是正确的工作工具,尽管我认为一旦完成笨拙的写操作,它就会很棒。

我有一个关于如何最好地使用python / h5py写入hdf5文件的问题。我有类似的数据:----------------------------------------- |时间点|电压1 |电压2 | ... -------------------...

python hdf5 h5py
2个回答
24
投票

Per the FAQ,您可以使用dset.resize展开数据集。例如,


7
投票

正如@unutbu指出的,dset.resize是一个很好的选择。查看pandas及其HDF5支持可能会有用,这对于您的工作流程可能会很有用。听起来HDF5是满足您需求的合理选择,但使用顶部附加一层可能会更好地表达您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.