저는 수백만 개의 텍스트 파일에서 큰 텍스트 처리 작업을 준비하기 위해 dask.bag의 일부 테스트를 시도하고 있습니다. 현재 수십에서 수십만 개의 텍스트 파일로 이루어진 테스트 세트에서 dask가 직선 단일 스레드 텍스트 처리 기능보다 5 ~ 6 배 더 느리게 실행되는 것을 볼 수 있습니다.Python Dask bag으로 느린 성능?
대용량 텍스트 파일에서 dask를 실행할 때의 속도상의 이점을 어디에서 설명 할 수 있습니까? 얼마나 빨리 처리되기 전에 몇 개의 파일을 처리해야합니까? 150,000 개의 작은 텍스트 파일이 너무 적습니까? 파일을 처리 할 때 속도 향상을 위해 어떤 종류의 성능 매개 변수를 조정해야합니까? 직선 단일 스레드 텍스트 처리보다 성능이 5 배나 떨어지는 이유는 무엇입니까?
다음은 dask out을 테스트하는 데 사용하는 코드의 예입니다. 이것은에있는 로이터 데이터의 테스트 세트에 대해 실행 :
http://www.daviddlewis.com/resources/testcollections/reuters21578/
이 데이터는 정확히 내가에 대한 일하고 있어요 데이터와 동일하지 않습니다. 다른 경우에는 개별 텍스트 파일, 파일 당 하나의 문서 묶음이지만 성능 저하는 거의 같습니다. 여기에 코드입니다 :
import dask.bag as db
from collections import Counter
import string
import glob
import datetime
my_files = "./reuters/*.ascii"
def single_threaded_text_processor():
c = Counter()
for my_file in glob.glob(my_files):
with open(my_file, "r") as f:
d = f.read()
c.update(d.split())
return(c)
start = datetime.datetime.now()
print(single_threaded_text_processor().most_common(5))
print(str(datetime.datetime.now() - start))
start = datetime.datetime.now()
b = db.read_text(my_files)
wordcount = b.str.split().concat().frequencies().topk(5, lambda x: x[1])
print(str([w for w in wordcount]))
print(str(datetime.datetime.now() - start))
여기 내 결과가 있었다 : DASK이 작업에 약 1ms의 오버 헤드 비용에 대해 초래
[('the', 119848), ('of', 72357), ('to', 68642), ('and', 53439), ('in', 49990)]
0:00:02.958721
[(u'the', 119848), (u'of', 72357), (u'to', 68642), (u'and', 53439), (u'in', 49990)]
0:00:17.877077