Ich habe etwa 500 HDF5-Dateien mit jeweils etwa 1,5 GB.
Jede der Dateien hat genau dieselbe Struktur, d. h. 7 zusammengesetzte (int,double,double) Datensätze und eine variable Anzahl von Stichproben.
Nun möchte ich alle diese Dateien verketten, indem ich jeden der Datensätze verkette, so dass ich am Ende eine einzige 750 GB große Datei mit meinen 7 Datensätzen habe.
Derzeit führe ich ein h5py-Skript aus, das:
- erstellt eine HDF5-Datei mit den richtigen Datensätzen von unbegrenzter Größe
- alle Dateien nacheinander öffnen
- Prüfen Sie die Anzahl der Stichproben (da sie variabel ist).
- die Größe der globalen Datei ändern
- die Daten anhängen
Dies dauert natürlich viele Stunden, Hätten Sie einen Vorschlag, wie man das verbessern könnte?
Ich arbeite an einem Cluster, also könnte ich HDF5 parallel verwenden, aber ich bin nicht gut genug in C Programmierung etwas selbst zu implementieren, bräuchte ich ein bereits geschriebenes Tool.
0 Stimmen
Eine Möglichkeit ist die Zusammenlegung von Dateipaaren in Ihrem Cluster; reduzieren Sie das Problem auf 250 3-GB-Dateien, dann 125 6-GB-Dateien usw. Dies ist nur dann hilfreich, wenn die teilweise Zusammenführung von Dateien bei der späteren Zusammenführung der Ergebnisse eine gewisse Zeitersparnis bringt.
0 Stimmen
@sarnold Ich arbeite an hopper am NERSC, die theoretische I/O Geschwindigkeit beträgt 25 GB/s, auch das Dateisystem ist vollständig parallel und unterstützt MPI I/O.
0 Stimmen
Ich dachte, vielleicht 3 oder 4 Dateien auf einmal zu lesen und schreiben sie zurück alle zusammen, aber das beste wäre ein c-Dienstprogramm, das irgendwie mpi I/O ausnutzt.
0 Stimmen
Andrea, ich bin sprachlos. Ich dachte, eine Reihe hervorragender Laufwerke würde immer noch nicht über ein Gigabyte pro Sekunde hinauskommen...
2 Stimmen
Eine Funktion von hdf5 besteht darin, dass Sie mehrere Unterdateien in einen "Ordner" der Hauptdatei "einhängen" können. Auf diese Weise ist es möglicherweise nicht erforderlich, sie alle in einer Datei zusammenzuführen. Siehe hier: davis.lbl.gov/Manuals/HDF5-1.4.3/Tutor/mount.html
0 Stimmen
Danke @schoetbi, aber ich möchte die Datensätze verketten, um ein einziges großes Array zu erhalten
0 Stimmen
@AndreaZonca Könntest du bitte eine Kopie deines Skripts für diese Aufgabe posten? Ich versuche gerade, etwas Ähnliches zu tun, und das klingt, als wäre es sehr hilfreich.
1 Stimmen
Siehe diesen Ausschnitt: gist.github.com/zonca/8e0dda9d246297616de9