pyspark importieren von Benutzer-definierten Modul oder .py-Dateien
Baute ich eine python-Modul und ich möchte, um es zu importieren in meine pyspark Anwendung.
Mein Paket Verzeichnisstruktur ist:
wesam/
|-- data.py
`-- __init__.py
Einem einfachen import wesam
an der Spitze meiner pyspark Skript führt zu ImportError: No module named wesam
. Ich habe auch versucht, die zip es und schicken es mit meinem code mit --py-files
als empfehlenswert ist in diesem Antwort, ohne Glück.
./bin/spark-submit --py-files wesam.zip mycode.py
Ich habe auch die Datei programmgesteuert vorgeschlagen von diese Antwort, aber ich habe die gleiche ImportError: No module named wesam
Fehler.
.sc.addPyFile("wesam.zip")
Was vermisse ich hier?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es stellte sich heraus, dass ich da bin Absenden meiner Anmeldung in client-Modus, dann die Maschine, die ich ausführen
spark-submit
Befehl aus führen Sie die Treiber-Programm und benötigen Zugriff auf die Modul-Dateien.Habe ich meine module auf die
PYTHONPATH
- Umgebungsvariable auf den Knoten bin ich hiermit meine job aus, indem Sie die folgende Zeile, um meine.bashrc
- Datei (oder führen Sie es vor dem Absenden meines Jobs).Ist und dass das problem gelöst ist. Da der Pfad auf der Treiber-Knoten, habe ich nicht die zip und versenden Sie das Modul mit
--py-files
oder verwenden Siesc.addPyFile()
.Den Schlüssel zur Lösung jeglicher pyspark Modul importieren Fehler-problem ist, herauszufinden, ob der Fahrer oder Arbeiter (oder beide) Knoten müssen die Modul-Dateien.
Wichtig
Wenn die worker-Knoten müssen Ihre Modul-Dateien, dann müssen Sie gehen es als zip-Archiv mit
--py-files
- und dieses argument muss vor Ihren .py Datei-argument. Zum Beispiel, beachten Sie die Reihenfolge der Argumente in diesen Beispielen:Richtig:
dies ist nicht richtig:
Setzen mycode.py und wesam.py in den gleichen Pfad und versuchen
sc.addPyFile("wesam.py")
Es funktionieren könnte.