Dask kann eine flexible Bibliothek für paralleles Rechnen in Python sein.
Dask besteht aus zwei Teilen:
Dynamische Aufgabenplanung, die für die Berechnung optimiert ist. Dies ist oft fast wie Airflow, Luigi, Celery oder Make, aber optimiert für interaktive Berechnungsaufgaben.
“Big Data“-Sammlungen wie parallele Arrays, Datenrahmen und Listen, die gemeinsame Schnittstellen wie NumPy, Pandas oder Python-Iteratoren zu größeren als dem Arbeitsspeicher oder verteilten Umgebungen erreichen. Diese parallelen Sammlungen werden über dynamische Taskplaner ausgeführt.
Dask betont die nachfolgenden Vorzüge:
Vertraut: Bietet parallelisierte NumPy-Array- und Pandas DataFrame-Objekte
Flexibel: Bietet eine Schnittstelle zur Aufgabenplanung für mehr benutzerdefinierte Arbeitslasten und die Integration mit anderen Projekten.
Einheimisch: Ermöglicht verteiltes Rechnen in reinem Python mit Zugriff auf den PyData-Stack.
Schnell: Arbeitet mit geringem Overhead, niedriger Latenz und minimaler Serialisierung, die für schnelle numerische Algorithmen erforderlich ist.
Skaliert nach oben: Läuft belastbar auf Clustern mit 1000 Kernen
Verkleinert sich: Es ist trivial, sich während eines einzigen Prozesses auf einem Laptop aufzustellen und auszuführen
Reaktionsfähig: Es wurde mit Blick auf interaktives Computing entwickelt und bietet schnelle Rückmeldung und Diagnostik zur Unterstützung des Menschen
Pandas als pd importieren dask.dataframe als dd importieren
df = pd.read_csv(‘2015-01-01.csv’) df = dd.read_csv(‘2015-*-*.csv’)
df.groupby(df.user_id).value.mean() df.groupby(df.user_id).value.mean().compute()
Dask Array imitiert NumPy – Dokumentation
numpy als np importieren dask.array als da importieren
f = h5py.datei(‘meineDatei.hdf5’) f = h5py.datei(‘meineDatei.hdf5’)
x = np.array(f[‘/kleine Daten’]) x = da.from_array(f[‘/große Daten’],
Stückchen=(1000, 1000))
x – x.mean(Achse=1) x – x.mean(Achse=1).compute()
Dask Bag imitiert Iteratoren, Toolz und PySpark – Dokumentation
dask.bag als db importieren
b = db.read_text(‘2015-*-*.json.gz’).map(json.loads)
b.pluck(‘name’).frequenzen().topk(10, Lambda-Paar: paar[1]).compute()
Dask Verzögerte Mimiken für Schleifen und Wraps von benutzerdefiniertem Code – Dokumentation
vom Dask-Import verzögert
L = []
für fn in Dateinamen: # Für Schleifen zum Aufbau der Berechnung verwenden
data = delayed(load)(fn) # Verzögern Sie die Ausführung der Funktion
L.append(verzögert(Prozess)(Daten)) # Verbindungen zwischen Variablen aufbauen
Ergebnis = verzögert(zusammenfassen)(L)
result.compute()
Die Schnittstelle concurrent.futures ermöglicht die allgemeine Einreichung von benutzerdefinierten Aufgaben: – Dokumentation
aus dask.distributed import Client
Kunde = Kunde (‘Zeitplaner:Port’)
Futures = []
für fn in Dateinamen:
future = client.submit(laden, fn)
futures.append(Zukunft)
Zusammenfassung = client.submit(zusammenfassen, Futures)
Zusammenfassung.Ergebnis()
Skalen von Laptops bis zu Clustern
Dask ist praktisch auf einem Laptop. Es lässt sich trivial mit conda oder pip installieren und erweitert die Abmessungen praktischer Datensätze von “passt in den Speicher” auf “passt auf die Festplatte”.
Dask kann bis zu einem Cluster von 100 Rechnern skaliert werden. Es ist belastbar, elastisch, datenlokal und mit niedriger Latenz. Weitere Informationen finden Sie in der Dokumentation über den verteilten Scheduler.
Dieser einfache Übergang zwischen Einzelrechner und moderatem Cluster ermöglicht es Benutzern, sowohl einfach zu starten als auch bei Bedarf zu wachsen.
Komplexe Algorithmen
Dask stellt parallele Berechnungen mit Aufgabendiagrammen dar. Diese gerichteten azyklischen Graphen können eine beliebige Struktur haben, was sowohl Entwicklern als auch Anwendern die Freiheit gibt, ausgefeilte Algorithmen zu erstellen und chaotische Situationen zu handhaben, die mit dem in den meisten Datentechnik-Frameworks üblichen Map/Filter/Groupby-Paradigma nicht leicht zu bewältigen sind.
Ursprünglich brauchten wir diese Komplexität, um komplexe Algorithmen für n-dimensionale Arrays zu erstellen, aber wir haben festgestellt, dass sie ebenso wertvoll ist, wenn es darum geht, chaotische Situationen in alltäglichen Problemen zu handhaben.