Python 在vaex中修改hdf5文件的工作流

Python 在vaex中修改hdf5文件的工作流,python,vaex,Python,Vaex,作为我上一个问题[1]的后续问题,是否有方法在vaex中打开hdf5数据集,执行操作,然后将结果存储到同一数据集 我尝试了以下方法: import vaex as vx vxframe = vx.open('somedata.hdf5') vxframe = some_transformation(vxframe) vxframe.export_hdf5('somedata.hdf5') 这导致错误OSError:无法创建文件(无法截断已打开的文件),因此h5py无法在文件打开时写入文件。是

作为我上一个问题[1]的后续问题,是否有方法在vaex中打开hdf5数据集,执行操作,然后将结果存储到同一数据集

我尝试了以下方法:

import vaex as vx

vxframe = vx.open('somedata.hdf5')
vxframe = some_transformation(vxframe)
vxframe.export_hdf5('somedata.hdf5')
这导致错误
OSError:无法创建文件(无法截断已打开的文件)
,因此
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

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

复制到新文件的效率不会低于写入自身(至少在本例中不是这样),因为它必须写入相同数量的字节。我也不建议这样做,因为如果你犯了错误,你会把你的数据弄乱

导出数据实际上相当有效,但更好的是,您还可以选择只导出所需的列:

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

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

很抱歉我回来这么晚,但我总是得到一个
AttributeError:'Hdf5MemoryMapped'对象没有属性“merge”
,当我这样做时,它应该是
join
,merge不存在,很抱歉造成混淆。您也可以执行
df=vaex.open('somedata*.hdf5')
,它将自动打开并合并文件。很抱歉,我回来得这么晚,但我总是得到一个
AttributeError:'Hdf5MemoryMapped'对象在我执行此操作时没有属性“merge”
。这应该是
join
,merge不存在,抱歉造成混淆。您也可以执行
df=vaex.open('somedata*.hdf5')
操作,该操作将自动打开并合并文件。