2016-07-07 12 views
2

컨텍스트 : Dask 설명서에 명확하게 Bag.take()은 첫 번째 파티션에서만 수집됩니다. 그러나 필터를 사용하면 첫 번째 파티션이 비어있는 반면 다른 파티션은 비어있을 수 있습니다.dask를 사용할 때`Bag.take (n)`을 사용하여 빈 결과를 피하는 방법?

질문 : 은 (n보다 작거나 가능한 최대까지) n 항목을 수집하는 파티션 충분한 개수에서 수집되도록 가능 Bag.take()을 사용하는 것이다.

+0

게시하기 전에 설명서를 읽어 주셔서 감사합니다. 이것은 나를 행복하게 해줍니다. – MRocklin

답변

1

당신은 다음과 같이 뭔가를 할 수 :

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

이 각 파티션의 처음 n 요소를 잡고 함께 그들 모두를 수집 한 다음 결과의 처음 n 요소를합니다.

+0

이것은 작동하지 않았습니다! 도구 버전 0.8.0, dask 0.10, 파이썬 3.5.2 'tb = db.from_sequence (범위 (20), npartitions = 4)' 'tb.reduction (take (2), take (2)' 주는 PicklingError : itertools.islice '> 유형의 객체를 피클링 할 수 없습니다 - 도와 주셔서 감사합니다 .. – JMann

+0

아, pickling이 이상합니다. 아마도 f = lambda seq : list (take (n, seq))' 그리고 b.reduction (f, f) 대신. – MRocklin

+0

이 작업을 수행했으며, 필자는 피클의 매력을 다른 곳에서도 읽었습니다. 놀랍게도 지금은 몇 년 전의 게시물이었습니다. – JMann