在 vaex 中修改 hdf5 文件的工作流程
Workflow for modifying an hdf5 file in vaex
作为我之前问题 [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]
复制到新文件的效率不会低于写入自身的效率(至少对于本例而言),因为它必须写入相同数量的字节。我也不推荐它,因为如果你犯了一个错误,你会弄乱你的数据。
导出数据其实效率很高,但更好的是,你还可以选择只导出你想要的列:
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
我们经常使用这种方法,在磁盘上创建预先计算的辅助数据集。将它们重新加入(基于行)是即时的,不需要任何时间或内存。
作为我之前问题 [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]
复制到新文件的效率不会低于写入自身的效率(至少对于本例而言),因为它必须写入相同数量的字节。我也不推荐它,因为如果你犯了一个错误,你会弄乱你的数据。
导出数据其实效率很高,但更好的是,你还可以选择只导出你想要的列:
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
我们经常使用这种方法,在磁盘上创建预先计算的辅助数据集。将它们重新加入(基于行)是即时的,不需要任何时间或内存。