Was ist der beste Weg, um eine riesige Datei (etwa 1 TB) in Haskell zu lesen. Grundsätzlich enthält die Datei eine Matrix aus ganzzahligen Daten. und ich muss möglicherweise (effizient) die Korrelation zwischen den verschiedenen Zeilen oder zwischen Spalten berechnen.
Ich habe vorher Pytables dafür verwendet, aber ich habe versucht, dasselbe in Haskell zu versuchen. Ich weiß, Haskell hat einige HDF5-Bindungen, aber gibt es andere Optionen, die mir nicht bekannt sind?
Sie können mmap auch ausprobieren. Zum Beispiel können Sie eine ganze Datei als ByteString
:
Das Ausschneiden eines Stücks ist schnell - es werden keine Daten kopiert. Dann können Sie jedes Werkzeug verwenden, um ByteString
s zu parsen.
Wie in jeder anderen Sprache: Sie suchen (mit System.IO.hSeek
) und verwenden dann binäre IO ( Data.ByteString.hGet
). Dann parsen Sie das Ergebnis (z. B. mit attoparsec) und verarbeiten Sie nach Bedarf.
Betrachten Sie das Paket iteratee . Es unterstützt suche , und attoparsec-iteratee Paket ermöglicht die Integration mit attoparsec.
Der vorgeschlagene hSeek
+ hGet
-Ansatz ist niedrig. iteratee
ist ein Ansatz auf höherer Ebene, kann aber für Anfänger schwieriger sein.
Tags und Links haskell