webentwicklung-frage-antwort-db.com.de

pyspark importiert benutzerdefinierte Module oder .py-Dateien

Ich habe ein python-Modul erstellt und möchte es in meine Pyspark-Anwendung importieren.

Meine Paketverzeichnisstruktur lautet:

wesam/
|-- data.py
`-- __init__.py

Ein einfacher import wesam oben in meinem Pyspark-Skript führt zu ImportError: No module named wesam. Ich habe auch versucht, es zu verschlüsseln und es zusammen mit meinem Code mit --py-files als in dieser Antwort empfohlen zu senden , ohne Erfolg.

./bin/spark-submit --py-files wesam.Zip mycode.py

Ich habe die Datei auch programmgesteuert hinzugefügt, wie von this answer vorgeschlagen, aber ich habe den gleichen ImportError: No module named wesam-Fehler erhalten.

.sc.addPyFile("wesam.Zip")

Was fehlt mir hier?

14
Wesam

Es stellte sich heraus, dass der Computer, auf dem ich den Befehl spark-submit Ausführe, das Treiberprogramm ausführt und auf die Moduldateien zugreifen muss, da ich meine Bewerbung im Client-Modus abschicke.

enter image description here

Ich habe mein Modul zu der Umgebungsvariablen PYTHONPATH auf dem Knoten hinzugefügt, von dem aus ich meinen Job abschicke, indem ich der Datei .bashrc Die folgende Zeile hinzufügte (oder sie ausführte, bevor ich meinen Job abschickte).

export PYTHONPATH=$PYTHONPATH:/home/welshamy/modules

Und das löste das Problem. Da sich der Pfad auf dem Treiberknoten befindet, muss ich das Modul nicht mit --py-files Komprimieren und ausliefern oder sc.addPyFile() verwenden.

Der Schlüssel zur Lösung eines Problems mit dem Import von Pyspark-Modulen liegt darin, zu verstehen, ob der Treiber oder der Worker-Knoten (oder beide) die Moduldateien benötigen.

Wichtig Wenn die Worker-Knoten Ihre Moduldateien benötigen, müssen Sie diese als Zip-Archiv mit --py-files Übergeben und diesem Argument muss voranstellen Ihr Argument für die .py-Datei. Beachten Sie beispielsweise die Reihenfolge der Argumente in diesen Beispielen:

Das ist richtig:

./bin/spark-submit --py-files wesam.Zip mycode.py

das ist nicht richtig:

./bin/spark-submit mycode.py --py-files wesam.Zip
41
Wesam

Setzen Sie mycode.py und wesam.py in den gleichen Pfad und versuchen Sie es

sc.addPyFile("wesam.py")

Es könnte klappen.

3
Dj.OU