CSV-Datei in Clojure parallel verarbeiten

8

Ich habe eine große CSV-Datei, die unabhängige Elemente enthält, deren Verarbeitung ein hohes Maß an Aufwand erfordert. Ich möchte jede Werbebuchung parallel verarbeiten können. Ich habe hier einen Beispielcode für die Verarbeitung einer CSV-Datei auf SO gefunden:

Neuling, der CSV-Dateien in Clojure transformiert

Der Code lautet:

%Vor%

Dies war in der Lage, Daten aus meiner CSV-Datei auszudrucken, was großartig war - aber es verwendete nur eine CPU. Ich habe verschiedene Dinge ausprobiert und bin dabei:

%Vor%

Dies funktioniert im interaktiven Modus einwandfrei, tut aber nichts, wenn es über die Befehlszeile ausgeführt wird. Bei einer Konversation im IRC liegt das daran, dass stdout standardmäßig nicht für Threads verfügbar ist.

Was ich wirklich suche, ist eine Möglichkeit, eine Funktion für jede Zeile der CSV-Datei idiomatisch anzuwenden und dies parallel zu tun. Ich würde auch gerne einige Ergebnisse während des Tests ausdrucken, wenn möglich.

Irgendwelche Ideen?

    
PeterM 04.04.2011, 03:38
quelle

3 Antworten

12

Wenn Sie möchten, dass die Ergebnisse in der Ausgabe in der gleichen Reihenfolge wie in der Eingabe angezeigt werden, ist das Drucken von pmap möglicherweise keine gute Idee. Ich würde empfehlen, eine (faule) Sequenz der Eingabezeilen pmap darüber zu erstellen und dann das Ergebnis von pmap zu drucken. So etwas sollte funktionieren:

%Vor%     
subsub 04.04.2011, 07:37
quelle
7

Wenn Sie dies mit hoher Geschwindigkeit tun möchten, sollten Sie sich dieses hier .

    
mac 04.04.2011 05:12
quelle
2

Ich wäre sehr überrascht, wenn der Code mit mehr Kernen beschleunigt werden könnte. Ich bin zu 99% sicher, dass die tatsächliche Geschwindigkeitsbegrenzung hier die Datei-I / O ist, die ein paar Größenordnungen langsamer sein sollte als jeder einzelne Kern, den Sie bei dem Problem werfen können.

Und das ist abgesehen von dem Overhead, den Sie einführen werden, wenn Sie diese sehr minimalen Aufgaben auf mehrere CPUs verteilen. Pmap ist nicht genau frei.

Wenn Sie sicher sind, dass die Festplatten-IO kein Problem sein wird und Sie viel CSV-Parsing durchführen müssen, werden Sie einfach mehrere Dateien in ihren eigenen Threads analysieren gewinnen Sie viel mehr für viel weniger Aufwand.

    
Joost Diepenmaat 04.04.2011 08:30
quelle

Tags und Links