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?

Author: Community, 2017-04-21

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.

Tutaj wpisz opis obrazka

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
 26
Author: Wesam,
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")

To może zadziałać.
 1
Author: Dj.OU,
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