2016-07-07 24 views
2

Kontext: Dask Dokumentation besagt eindeutig, dass Bag.take() nur von der ersten Partition sammeln. Bei Verwendung eines Filters kann es jedoch vorkommen, dass die erste Partition leer ist, andere nicht.Wie vermeidet man ein leeres Ergebnis mit `Bag.take (n)` bei Verwendung von DASK?

Frage: Ist es möglich, Bag.take() zu verwenden, so dass es von einer ausreichenden Anzahl von Partitionen sammelt (verfügbar weniger oder maximal als als n) die n Gegenstände zu sammeln.

+0

Danke für das Lesen der Dokumentation vor dem Posten! Das macht mich glücklich :) – MRocklin

Antwort

1

Man könnte so etwas wie folgt tun:

from toolz import take 
f = lambda seq: list(take(n, seq)) 
b.reduction(f, f) 

Dieser greift die ersten n Elemente jeder Partition, sammelt sie alle zusammen, und nimmt dann die ersten n Elemente des Ergebnisses.

+0

das hat nicht funktioniert! mit Tools Version 0.8.0, dask 0.10, python 3.5.2 'tb = db.from_sequence (Bereich (20), npartitions = 4)' 'tb.reduction (nehmen (2), nehmen (2)' gibt PicklingError: Kann Objekte des Typs nicht picken. – JMann

+0

Ah, Beizen ist ungerade Vielleicht verwenden Sie 'f = lambda seq: list (take (n, seq))' und 'b.reduction (f, f)' statt. – MRocklin

+0

dies tat es. und, ja ich habe anderswo den Charme der Essiggurke gelesen, alarmierend war es von einem Pfosten jetzt mehrere Jahre alt. – JMann