2016-07-07 7 views
2

Контекст: Документация Dask четко указывает, что Bag.take() будет собираться только из первого раздела. Однако при использовании фильтра может случиться, что первый раздел пуст, а другие нет.Как избежать пустого результата с помощью `Bag.take (n)` при использовании dask?

Вопрос: Можно ли использовать Bag.take() так, что он собирает из достаточного количества разделов, чтобы собрать n элементы (или максимум доступных меньше, чем n).

+0

Спасибо за чтение документации перед публикацией! Это делает меня счастливым :) – MRocklin

ответ

1

Вы могли бы сделать что-то вроде следующего:

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

Это захватывает первые п элементов каждого раздела, собирает их все вместе, а затем принимает первые п элементов результата.

+0

это не сработало! используя инструменты версии 0.8.0, dask 0.10, python 3.5.2 'tb = db.from_sequence (диапазон (20), npartitions = 4)' 'tb.reduction (take (2), take (2)' дает PicklingError: Невозможно рассорить объекты типа - Я действительно ценю вашу помощь .. – JMann

+0

Ах, травление нечетно. Возможно, используйте 'f = lambda seq: list (take (n, seq))' и 'b.reduction (f, f)' вместо этого. – MRocklin

+0

это сделало. И, да, я читал в других местах прелести рассола, тревожно, что это было от поста, которому уже несколько лет. – JMann

 Смежные вопросы

  • Нет связанных вопросов^_^