Ich probiere einige Tests von dask.bag aus, um mich auf einen großen Textverarbeitungsprozess über Millionen von Textdateien vorzubereiten. Gerade jetzt, auf meinen Testsätzen von Dutzenden bis Hunderttausenden von Textdateien, sehe ich, dass dask etwa 5 bis 6 mal langsamer läuft als eine direkte Textverarbeitungsfunktion mit nur einem einzigen Text.Langsame Leistung mit Python-Dies-Tasche?
Kann mir jemand erklären, wo ich die Geschwindigkeitsvorteile durch das Ausführen von DASK über eine große Anzahl von Textdateien sehen kann? Wie viele Dateien müsste ich verarbeiten, bevor es schneller wird? Sind 150.000 kleine Textdateien einfach zu wenig? Welche Art von Leistungsparametern sollte ich optimieren, um das zu beschleunigen, wenn Dateien verarbeitet werden? Was könnte eine 5-fache Leistungseinbuße gegenüber der reinen Textverarbeitung mit nur einem einzigen Text bedeuten?
Hier ist ein Beispiel für den Code, den ich verwende, um dies zu testen. Dies läuft gegen einen Testsatz von Daten von Reuters sich unter:
http://www.daviddlewis.com/resources/testcollections/reuters21578/
Diese Daten sind nicht genau das gleiche wie die Daten gegen ich arbeite. In meinem anderen Fall ist es eine Reihe von einzelnen Textdateien, ein Dokument pro Datei, aber der Leistungsabfall, den ich sehe, ist ungefähr derselbe. Hier ist der Code:
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))
Hier waren meine Ergebnisse:
[('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