1

作为对我之前的问题 [1] 的跟进,有没有办法在 vaex 中打开 hdf5 数据集,执行操作,然后将结果存储到同一个数据集?

我尝试了以下方法:

import vaex as vx

vxframe = vx.open('somedata.hdf5')
vxframe = some_transformation(vxframe)
vxframe.export_hdf5('somedata.hdf5')

这会导致错误OSError: Unable to create file (unable to truncate a file which is already open),因此h5py在文件打开时无法写入文件。是否有另一个工作流程来实现这一目标?我可以写入另一个文件作为解决方法,但这似乎效率很低,因为(我想)它还必须复制所有未更改的数据。

[1]将通过 pandas/pytables 编写的大型 hdf5 数据集转换为 vaex

4

1 回答 1

3

复制到新文件的效率不会低于写入自身的效率(至少对于这个例子来说不是),因为它必须写入相同数量的字节。我也不推荐它,因为如果你犯了错误,你会弄乱你的数据。

导出数据实际上非常有效,但更好的是,您还可以选择只导出您想要的列:

df = vaex.open('somedata.hdf5')
df2 = some_transformation(df)
df2[['new_column1', 'new_columns2']].export('somedata_extra.hdf5')
...
# next time
df = vaex.open('somedata.hdf5')
df2 = vaex.open('somedata_extra.hdf5')
df = df.join(df2)  # merge without column name will merge on rows basis

我们经常使用这种方法,在磁盘上创建预先计算的辅助数据集。将它们重新加入(在行基础上)是即时的,不需要任何时间或记忆。

于 2019-12-21T18:00:40.177 回答