我有大约500个HDF5文件,每个大约1.5 GB。
每个文件都具有相同的确切结构,即7个复合(int,double,double)数据集和可变数量的样本。
现在我想通过连接每个数据集来连接所有这些文件,以便最后我有一个包含7个数据集的750 GB文件。
目前我正在运行一个h5py脚本:
我正在开发一个集群,所以我可以并行使用HDF5,但是我在 C 编程中不够自己实现一些东西,我需要一个已经编写过的工具。
答案 0 :(得分:9)
我发现大部分时间花在调整文件大小上,因为我在每一步都要调整大小,所以我现在首先要通过所有文件来获取它们的长度(它是可变的)。
然后我创建全局h5文件,将总长度设置为所有文件的总和。
仅在此阶段之后,我用所有小文件中的数据填充h5文件。
现在每个文件大约需要10秒钟,所以它需要不到2个小时,而在它花费更多之前。
答案 1 :(得分:1)
我得到了回答,这给我带来了一个死神徽章 - 但最近我在这方面的情况有所改善。
在朱莉娅这需要几秒钟。
label$i = h5read(original_filepath$i, "/label")
h5write(data_file_path, "/label", label)
如果您有组或更复杂的hdf5文件,则可以执行相同操作。
答案 2 :(得分:1)
阿什利的回答对我很有用。以下是朱莉娅对她的建议的实施:
ls -rt $somedirectory/$somerootfilename-*.hdf5 >> listofHDF5files.txt
# concatenate_HDF5.jl
using HDF5
inputfilepath=ARGS[1]
outputfilepath=ARGS[2]
f = open(inputfilepath)
firstit=true
data=[]
for line in eachline(f)
r = strip(line, ['\n'])
print(r,"\n")
datai = h5read(r, "/data")
if (firstit)
data=datai
firstit=false
else
data=cat(4,data, datai) #In this case concatenating on 4th dimension
end
end
h5write(outputfilepath, "/data", data)
julia concatenate_HDF5.jl listofHDF5files.txt final_concatenated_HDF5.hdf5