2017-02-22 1 views
1

Ich fragte mich, ob jemand mir helfen könnte zu verstehen, wie Bag Objekte mit Partitionen umgehen. Einfach gesagt, ich versuche, Elemente in einer Bag Gruppe so gruppieren, dass jede Gruppe in einer eigenen Partition ist. Was mich verwirrt ist, dass die Bag.groupby() Methode nach einer Anzahl von Partitionen fragt. Sollte dies nicht durch die Gruppierungsfunktion impliziert werden? Z. B. zwei Partitionen, wenn die Gruppierungsfunktion einen booleschen Wert zurückgibt?Dask.bag Elemente in verschiedene Partitionen gruppieren

>>> a = dask.bag.from_sequence(range(20), npartitions = 1) 
>>> a.npartitions 
1 
>>> b = a.groupby(lambda x: x % 2 == 0) 
>>> b.npartitions 
1 

Ich vermisse hier offensichtlich etwas. Gibt es eine Möglichkeit, Bag Elemente in separate Partitionen zu gruppieren?

Antwort

0

Im Dies-Beutel können mehrere Gruppen innerhalb einer Partition platziert werden.

In [1]: import dask.bag as db 

In [2]: b = db.range(10, npartitions=3).groupby(lambda x: x % 5) 

In [3]: partitions = b.to_delayed() 

In [4]: partitions 
Out[4]: 
[Delayed(('groupby-collect-f00b0aed94fd394a3c61602f5c3a4d42', 0)), 
Delayed(('groupby-collect-f00b0aed94fd394a3c61602f5c3a4d42', 1)), 
Delayed(('groupby-collect-f00b0aed94fd394a3c61602f5c3a4d42', 2))] 

In [5]: for part in partitions: 
    ...:  print(part.compute()) 
    ...:  
[(0, [0, 5]), (3, [3, 8])] 
[(1, [1, 6]), (4, [4, 9])] 
[(2, [2, 7])] 
+0

In der Tat, das verwirrt mich. Wie kann ich jede Gruppe in einer eigenen Partition haben? Kann ich die Partitionen neu mischen (und wahrscheinlich die Anzahl der Partitionen ändern)? – ajmazurie

+0

Der Versuch, jede Gruppe auf eine separate Partition zu isolieren, klingt für mich seltsam. Vielleicht gibt es einen anderen Weg, um das zu erreichen, was Sie zu tun versuchen. Kannst du erklären, warum das dein Ziel in deiner ursprünglichen Frage ist? – MRocklin

+0

Ein typischer Anwendungsfall besteht darin, dass Partitionen unterschiedliche Teilmengen des Gesamtdatensatzes darstellen, die unabhängig voneinander behandelt werden (obwohl sie offensichtlich das gleiche Schema über Partitionen hinweg teilen). Derzeit werden Partitionen nur als interne Artefakte dargestellt, die zur Optimierung der Parallelisierung verwendet werden, im Gegensatz zum Apache Spark-Ansatz, bei dem sie auch logische Teilmengen eines größeren Datasets darstellen können. Als Beispiel kann man "dask.bag" -Elemente mit Zeitstempeln betrachten, die Sie in Partitionen gruppieren, die auf demselben Datum basieren. Eine Partition pro Tag ermöglicht nachgelagerte Analysen und Speicherung. – ajmazurie

Verwandte Themen