2017-02-22 15 views
1

Мне было интересно, может ли кто-нибудь помочь мне разобраться в способе Bag объекты обрабатывают разделы. Проще говоря, я пытаюсь группировать элементы, находящиеся в настоящее время в Bag, так что каждая группа находится в своем собственном разделе. Что меня смущает, так это то, что метод Bag.groupby() запрашивает несколько разделов. Разве это не должно подразумеваться функцией группировки? Например, два раздела, если функция группировки возвращает логическое значение?Группировка элементов dask.bag в отдельных разделах

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

У меня явно что-то отсутствует. Есть ли способ группировать Bag элементов на отдельные разделы?

ответ

0

Dask bag может содержать несколько групп в одной секции.

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

Действительно, вот что меня смущает. Как я могу использовать каждую группу в своем собственном разделе? Могу ли я повторно перетасовать (и, вероятно, изменить количество) разделов? – ajmazurie

+0

Попытка изолировать каждую группу к отдельному разделу звучит странно для меня. Возможно, есть еще один способ сделать то, что вы пытаетесь сделать. Можете ли вы объяснить, почему это ваша цель в вашем первоначальном вопросе? – MRocklin

+0

Типичный пример использования состоит в том, что разделы представляют собой различные подмножества общего набора данных, которые обрабатываются независимо (хотя очевидно, что они используют одну и ту же схему для разделов). Прямо сейчас разделы представлены только как внутренние артефакты, используемые для оптимизации распараллеливания, по сравнению с подходом Apache Spark, где они также могут представлять логические подмножества большего набора данных. В качестве примера можно рассмотреть временные элементы 'dask.bag', которые вы группируете на основе разделов на основе той же даты. Наличие одного раздела в день облегчает анализ и хранение в обратном направлении. – ajmazurie