Zum ausführen mehrerer jobs in einer Sparkcontext von separaten threads in PySpark?
Es versteht sich von Spark Dokumentation über Scheduling Innerhalb einer Anwendung:
Innerhalb einer bestimmten Funke Anwendung (SparkContext-Instanz), die mehrere parallele jobs können gleichzeitig ausgeführt werden, wenn Sie eingereicht wurden aus separaten threads. Durch "job" in diesem Abschnitt, meinen wir, ein Funke-Aktion (z.B. speichern, sammeln) und alle Aufgaben, die ausgeführt werden müssen, zu bewerten, die Aktion. Spark ' s scheduler ist vollständig thread-safe und die diesen Anwendungsfall unterstützt, damit die Anwendungen, die dazu dienen, mehrere Anfragen (z.B. Abfragen für mehrere Benutzer)."
Konnte ich einige Beispiel-code in Scala und Java.
Kann jemand ein Beispiel geben, wie diese umgesetzt werden können, mit PySpark?
- Jemals eine Antwort hier? Ich versuche das gleiche zu tun, und denken, es ist eigentlich unmöglich, bis bessere Verriegelung Hinzugefügt
SparkContext
s. - was meinst du ? Dieses Stück doc reden auch nicht über einen spezifischen Spark-API, es nur scheint zu funktionieren für alle. Der eigentliche code, der ausgeführt wird, wenn Sie mithilfe der APIs ist der Scala-code, und einige interface-code für Java und Python.
- Kannst du den link, wo diese Aussage herkommt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lief in das gleiche Problem, so habe ich eine kleine Selbstversorger-Beispiel. Ich erstelle mehrere threads mit python threading Modul und legt mehrere spark-jobs gleichzeitig.
Beachten Sie, dass standardmäßig, Funken, führen die jobs, die in First-In-First-Out (FIFO): http://spark.apache.org/docs/latest/job-scheduling.html#scheduling-within-an-application. Im Beispiel unten, ändere ich es um GERECHTE Planung
Ausgabe:
Heute, ich Frage mich das gleiche. Das multiprocessing-Modul bietet eine
ThreadPool
, die laichen ein paar threads für dich und läuft somit die jobs parallel. Zuerst instanziieren Sie die Funktionen ein, erstellen Sie dann den Pool, und dannmap
es über den Bereich, den Sie Durchlaufen.In meinem Fall war ich der Berechnung dieser WSSSE zahlen für die unterschiedliche Anzahl der Zentren (hyperparameter tuning), um eine "gute" k-means-clustering ... so wie es beschrieben ist in der MLSpark Dokumentation. Ohne weitere Erklärungen, hier sind einige Zellen aus meinem IPython Arbeitsblatt:
c_points sind 12dim arrays:
In der folgenden, für jede
i
ich bin computing dieses WSSSE Wert und er es als ein Tupel:Hier beginnt der interessante Teil:
Ausführen:
gibt:
%timeit
. die serielle Ausführung (mit einem "pulsierenden" Verhalten) nahm 53.2 Sekunden, während die parallelisierte Ansatz mit 4 threads fertig in 16.2 Sek. Also, es ist wirklich ein Unterschied. Mehr aktive Phasen parallel und immer einige in der Warteschlange.