私は、何百万ものテキストファイルで大規模なテキスト処理ジョブを準備するために、dask.bagのいくつかのテストを試しています。現在、数十から数十万のテキストファイルのテストセットで、私はdaskがまっすぐなシングルスレッドのテキスト処理機能よりも5〜6倍遅くなっているのを見ています。Pythonのパフォーマンスが遅いDaskバッグ?
誰かが大量のテキストファイルに対してdaskを実行することによるスピード上の利点をどこから説明できますか?高速化が始まる前に何個のファイルを処理する必要がありますか? 150,000の小さなテキストファイルは少なすぎますか?ファイルを処理する際にdaskを高速化するには、どのようなパフォーマンスパラメータを調整する必要がありますか?ストレートシングルスレッドテキスト処理に比べてパフォーマンスが5倍低下することはありますか?
ここでは、dask outをテストするために使用しているコードの例を示します。これは、に位置ロイターからのデータのテスト・セットに対して実行されている:
http://www.daviddlewis.com/resources/testcollections/reuters21578/
このデータは、私が不利に働いていたデータと全く同じではありません。それ以外の場合は、個々のテキストファイルが1つのファイルにまとめられていますが、パフォーマンスの低下はほぼ同じです。ここでは、コードがあります:ここでは
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))
は私の結果だった:
[('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