pyspark import moduł zdefiniowany przez użytkownika or.py pliki
Zbudowałem moduł Pythona i chcę go zaimportować do mojej aplikacji pyspark.
Moja struktura katalogów pakietów to:
wesam/
|-- data.py
`-- __init__.py
Prosty import wesam
na górze mojego skryptu pyspark prowadzi do ImportError: No module named wesam
. Starałem się go również zapinać i wysyłać z moim kodem z --py-files
jako zalecanym w tej odpowiedzi , bez powodzenia.
./bin/spark-submit --py-files wesam.zip mycode.py
Dodałem również plik programowo zgodnie z sugestią ta odpowiedź , ale dostałem ten sam błąd ImportError: No module named wesam
.
.sc.addPyFile("wesam.zip")
Kim jestem zaginęła?
2 answers
Okazało się, że ponieważ składam aplikację w trybie client, to maszyna, z której uruchamiam polecenie spark-submit
, uruchomi program sterownika i będzie musiała uzyskać dostęp do plików modułów.
Dodałem mój moduł do zmiennej środowiskowej PYTHONPATH
na węźle, z którego wysyłam zadanie, dodając następującą linię do pliku .bashrc
(lub wykonując ją przed wysłaniem zadania).
export PYTHONPATH=$PYTHONPATH:/home/welshamy/modules
I to rozwiązało problem. Ponieważ ścieżka jest na węzeł sterownika, nie muszę zamykać i wysyłać modułu za pomocą --py-files
lub używać sc.addPyFile()
.
Kluczem do rozwiązania każdego problemu z importem modułu pyspark jest zrozumienie, czy węzły sterownika lub pracownika (lub oba) potrzebują plików modułów.
Ważne Jeśli węzły robocze potrzebują plików modułów, musisz przekazać je jako archiwum zip z {[6] } i ten argument musi poprzedzać twój argument pliku .py. Przykładowo odnotuj kolejność argumentów w tych przykłady:
To jest poprawne:
./bin/spark-submit --py-files wesam.zip mycode.py
To jest Nie poprawne:
./bin/spark-submit mycode.py --py-files wesam.zip
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-21 02:14:00
Put mycode.py i wesam.py w tej samej lokalizacji ścieżki i spróbuj
sc.addPyFile("wesam.py")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-17 08:34:49