Ich versuche, numpige oder Pandas Operationen parallel zu machen. Dafür habe ich pydatas Blaze untersucht. Mein Verständnis war, dass eine nahtlose Parallelisierung das wichtigste Verkaufsargument war.
Leider konnte ich keine Operation finden, die auf mehr als einem Kern läuft. Ist die Parallelverarbeitung noch in vollem Gange oder aktuell nur ein erklärtes Ziel? Mache ich etwas falsch? Ich benutze Blaze v0.6.5.
Beispiel für eine Funktion, die ich parallelisieren wollte: (Deduplizierung einer Pytables-Spalte, die zu groß ist, um in den Speicher zu passen)
%Vor%Ich hatte Probleme, Phillips Beispielen zu folgen:
%Vor%Meine Umgebung:
%Vor%Aber Achtung, Blaze scheint eine falsche Version zu melden:
%Vor%Mit anderen Datenquellen scheint Blaze zu funktionieren:
%Vor% Hinweis: Das folgende Beispiel benötigt die neueste Version von blaze
, die Sie über
Sie benötigen auch die neueste Version des im Entstehen begriffenen into
Projekts. Sie müssen into
von master
installieren, was Sie mit
Sie können keine "nahtlose" Parallelisierung mit einem beliebigen Backend durchführen, sondern das bcolz
Backend unterstützt die Parallelisierung auf eine nette Art und Weise. Hier ist ein Beispiel mit dem NYC Taxitrip / Tarifdatensatz
Hinweis: Ich habe die Reise- und Tarifdatensätze in einem einzigen Datensatz zusammengefasst. Es gibt 173.179.759 Zeilen im Datensatz
%Vor% Um prozessbasierte Parallelität hinzuzufügen, fügen wir die Pool
-Klasse aus dem multiprocessing
stdlib-Modul ein und übergeben die Methode Pool
instance map
als Keyword-Argument an compute
:
Also, ungefähr eine dreifache Beschleunigung für eine zusätzliche Codezeile. Beachten Sie, dass dies eine String-Spalte ist und diese im Vergleich zu anderen Typen sehr ineffizient sind. Ein über eine Integer-Spalte berechneter distinct
-Ausdruck ist in etwa 1 Sekunde (gegenüber 3 Sekunden) mit mehreren Kernen beendet (also etwa die gleiche Verbesserung der Laufzeit):
Tags und Links python numpy pandas multiprocessing blaze