Ist foreachRDD auf dem Treiber ausgeführt?

Ich versuche, einige in einer JMS-Warteschlange (QPID) empfangene XML-Daten mit Spark Streaming zu verarbeiten. Nachdem ich xml als DStream erhalten habe, konvertiere ich sie in Dataframes, damit ich sie mit einigen meiner statischen Daten in Form von bereits geladenen Dataframes verbinden kann. Laut API-Dokumentation für die foreachRdd-Methode in DStream wird diese jedoch auf Driver ausgeführt. Das bedeutet, dass die gesamte Verarbeitungslogik nur auf Driver ausgeführt und nicht an Worker / Executor verteilt wird.

API Documentation

foreachRDD(func)

Der allgemeinste Ausgabeoperator, der eine Funktion (func) auf jede aus dem Stream generierte RDD anwendet. Diese Funktion sollte die Daten in jeder RDD auf ein externes System übertragen, z. B. das Speichern der RDD in Dateien oder das Schreiben über das Netzwerk in eine Datenbank. Beachten Sie, dass die Funktion func im Treiberprozess ausgeführt wird, in dem die Streaming-Anwendung ausgeführt wird, und normalerweise RDD-Aktionen enthält, die die Berechnung der Streaming-RDDs erzwingen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage