2016-08-22 2 views
3

Ich habe eine Datentabelle, die ~ 74 Millionen Zeilen hat, die ich verwendet habe, um es zu laden.Effiziente Möglichkeit, bestimmte Zeilen mit Blaze-Paket zu finden?

from blaze import CSV, data 
csv = CSV('train.csv') 
t = data(csv) 

Es hat Felder diese: A, B, C, D, E, F, G

Da es sich um einen so großer Datenrahmen, wie kann ich effizient Ausgabezeilen, die bestimmten Kriterien passen? Zum Beispiel möchte ich Zeilen mit A == 4, B == 8, E == 10. Gibt es eine Möglichkeit zum Multitasking der Suche? Zum Beispiel durch Threading oder parallele Programmierung oder etwas?

Durch parallele Programmierung meine ich zum Beispiel, ein Thread wird versuchen, die passende Zeile von Zeile 1 bis Zeile 100000 zu finden, und der zweite Thread wird versuchen, die passende Zeile von Zeile 100001 bis 200000 zu finden, und so weiter .. .

+0

Haben Sie bei http://stackoverflow.com/questions/27505764/pydata-blaze-does sah -erlaube-parallel-Verarbeitung-oder-nicht weiß ich nicht, aber die Antwort hier scheint in die Richtung zu zeigen, die Sie wollen – saulspatz

Antwort

1

ist Ihre Auswahlkriterien ganz einfach:

t[(t.A == 4) & (t.B == 8) & (t.E == 10)] 

die leicht verfügbar iris Beispieldatensatz als Beispiel:

from blaze import data 
from blaze.utils import example 
iris = data(example('iris.csv')) 

iris[(iris.sepal_length == 7) & (iris.petal_length > 2)] 
    sepal_length sepal_width petal_length petal_width   species 
50    7   3.2   4.7   1.4 Iris-versicolor 

Die Dokumente diskutieren parallel processing in Blaze.

Beachten Sie, dass man nur über Datensätze parallelisieren kann, die leicht in einer nicht seriellen Weise aufgeteilt werden können. Insbesondere kann man die Berechnung nicht über eine einzige CSV-Datei parallelisieren. Sammlungen von CSV-Dateien und binären Speichersystemen wie HDF5 und BColz unterstützen alle das Multiprocessing.

angezeigt, dass die Timings auf einer einzigen CSV-Datei in etwa gleich sind, wenn Multiprozessing mit:

import multiprocessing 
pool = multiprocessing.Pool(4) 

%timeit -n 1000 compute(iris[(iris.sepal_length > 7) & (iris.petal_length > 2)], 
         map=pool.map) 
1000 loops, best of 1: 12.1 ms per loop 

%timeit -n 1000 compute(iris[(iris.sepal_length > 7) & (iris.petal_length > 2)]) 
1000 loops, best of 1: 11.7 ms per loop 
Verwandte Themen