Direkter Zugriff auf eine riesige Datei in haskell

8

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?

    
Abhijit Ray 24.09.2013, 15:08
quelle

3 Antworten

9

Sie können mmap auch ausprobieren. Zum Beispiel können Sie eine ganze Datei als ByteString :

abbilden %Vor%

Das Ausschneiden eines Stücks ist schnell - es werden keine Daten kopiert. Dann können Sie jedes Werkzeug verwenden, um ByteString s zu parsen.

    
Petr Pudlák 24.09.2013, 19:49
quelle
12

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.

    
Roman Cheplyaka 24.09.2013 15:38
quelle
3

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.

    
Yuras 24.09.2013 16:20
quelle

Tags und Links