Używam Spark 1.4.0-rc2, więc mogę używać Pythona 3 z Spark. Jeśli dodam export PYSPARK_PYTHON=python3
do mojego pliku .bashrc, mogę uruchomić Spark interaktywnie z Pythonem 3. Jednak jeśli chcę uruchomić samodzielny program w trybie lokalnym, pojawia się błąd:
Exception: Python in worker has different version 3.4 than that in driver 2.7, PySpark cannot run with different minor versions
Jak mogę określić wersję Pythona dla sterownika? Ustawienie export PYSPARK_DRIVER_PYTHON=python3
nie działało.
źródło
.bashrc
.U mnie działa zarówno ustawienie, jak
PYSPARK_PYTHON=python3
iPYSPARK_DRIVER_PYTHON=python3
python3. Zrobiłem to używając eksportu w moim .bashrc. W końcu są to zmienne, które tworzę:export SPARK_HOME="$HOME/Downloads/spark-1.4.0-bin-hadoop2.4" export IPYTHON=1 export PYSPARK_PYTHON=/usr/bin/python3 export PYSPARK_DRIVER_PYTHON=ipython3 export PYSPARK_DRIVER_PYTHON_OPTS="notebook"
Postępowałem również zgodnie z tym samouczkiem, aby działał z poziomu notebooka Ipython3: http://ramhiser.com/2015/02/01/configuring-ipython-notebook-support-for-pyspark/
źródło
PYSPARK_PYTHON=python3
ustawia wersję pracowników w Pythonie, prawda?PYSPARK_PYTHON=python3; PYSPARK_DRIVER_PYTHON=ipython3
do Run> Edit Configurations> {your_run_config}> Environment Variables. Aby ustawić je jako domyślne dla wszystkich konfiguracji uruchamiania, zaktualizuj zmienne środowiskowe dla żądanych szablonów w obszarze Uruchom> Edytuj konfiguracje> SzablonyPomogło w moim przypadku:
import os os.environ["SPARK_HOME"] = "/usr/local/Cellar/apache-spark/1.5.1/" os.environ["PYSPARK_PYTHON"]="/usr/local/bin/python3"
źródło
Możesz określić wersję Pythona dla sterownika, ustawiając odpowiednie zmienne środowiskowe w
./conf/spark-env.sh
pliku. Jeśli jeszcze nie istnieje, możesz użyćspark-env.sh.template
dostarczonego pliku, który zawiera również wiele innych zmiennych.Oto prosty przykład
spark-env.sh
pliku do ustawiania odpowiednich zmiennych środowiskowych Pythona:#!/usr/bin/env bash # This file is sourced when running various Spark programs. export PYSPARK_PYTHON=/usr/bin/python3 export PYSPARK_DRIVER_PYTHON=/usr/bin/ipython
W tym przypadku ustawia wersję Pythona używaną przez pracowników / wykonawców na Python3, a wersję sterownika Pythona na iPython, aby ładniejsza powłoka działała.
Jeśli nie masz jeszcze
spark-env.sh
pliku i nie musisz ustawiać żadnych innych zmiennych, ten powinien zrobić, co chcesz, zakładając, że ścieżki do odpowiednich plików binarnych Pythona są poprawne (sprawdź za pomocąwhich
). Miałem podobny problem i to go naprawiło.źródło
Jeśli używasz Spark w większej organizacji i nie możesz zaktualizować pliku /spark-env.sh, eksportowanie zmiennych środowiskowych może nie działać.
Możesz dodać określone ustawienia Spark za pomocą
--conf
opcji podczas przesyłania zadania w czasie wykonywania.pyspark --master yarn --[other settings]\ --conf "spark.pyspark.python=/your/python/loc/bin/python"\ --conf "spark.pyspark.driver.python=/your/python/loc/bin/python"
źródło
Właśnie spotkałem się z tym samym problemem i oto kroki, które wykonuję, aby udostępnić wersję Python. Chciałem uruchamiać moje zadania PySpark w Pythonie 2.7 zamiast 2.6.
Przejdź do folderu, na który
$SPARK_HOME
wskazuje (w moim przypadku jest/home/cloudera/spark-2.1.0-bin-hadoop2.7/
)W folderze
conf
znajduje się plik o nazwiespark-env.sh
. Jeśli masz plik o nazwiespark-env.sh.template
, musisz skopiować go do nowego pliku o nazwiespark-env.sh
.Edytuj plik i napisz kolejne trzy wiersze
Zapisz go i ponownie uruchom aplikację :)
W ten sposób, jeśli pobierzesz nową samodzielną wersję Spark'a, możesz ustawić wersję Pythona, dla której chcesz uruchomić PySpark.
źródło
cp
plikuspark-env.sh.template
jako nowego,spark-env.sh
a następnie zmień nowy plik zamiast zmieniać nazwę i zawartość szablonu. Szablon ma pozostać punktem odniesienia.Natknąłem się na ten sam komunikat o błędzie i wypróbowałem trzy sposoby wymienione powyżej. Podałem wyniki jako odniesienie uzupełniające do innych.
PYTHON_SPARK
iPYTHON_DRIVER_SPARK
wspark-env.sh
nie działa dla mnie.os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5"
os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"
nie działa dla mnie.~/.bashrc
działa jak urok ~źródło
Uruchomiłem go w IPythonie (jak opisał w tym linku Jacek Wasilewski ) i otrzymywałem ten wyjątek; Dodano
PYSPARK_PYTHON
do pliku jądra IPython i użyłem notatnika jupyter do uruchomienia i zacząłem działać.vi ~/.ipython/kernels/pyspark/kernel.json { "display_name": "pySpark (Spark 1.4.0)", "language": "python", "argv": [ "/usr/bin/python2", "-m", "IPython.kernel", "--profile=pyspark", "-f", "{connection_file}" ], "env": { "SPARK_HOME": "/usr/local/spark-1.6.1-bin-hadoop2.6/", "PYTHONPATH": "/usr/local/spark-1.6.1-bin-hadoop2.6/python/:/usr/local/spark-1 .6.1-bin-hadoop2.6/python/lib/py4j-0.8.2.1-src.zip", "PYTHONSTARTUP": "/usr/local/spark-1.6.1-bin-hadoop2.6/python/pyspark/shell.py ", "PYSPARK_SUBMIT_ARGS": "--master spark://127.0.0.1:7077 pyspark-shell", "PYSPARK_DRIVER_PYTHON":"ipython2", "PYSPARK_PYTHON": "python2" }
źródło
Mam ten sam problem na autonomicznej iskrze w systemie Windows . Moja wersja poprawki wygląda następująco: moje zmienne środowiskowe zostały ustawione jak poniżej
PYSPARK_SUBMIT_ARGS="pyspark-shell" PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS='notebook' pyspark
Z tym ustawieniem wykonałem akcję na pyspark i otrzymałem następujący wyjątek:
Python in worker has different version 3.6 than that in driver 3.5, PySpark cannot run with different minor versions. Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.
Aby sprawdzić, z której wersji języka Python korzysta mój program Spark- Worker, w wierszu polecenia cmd naciśnij następujący przycisk .
python --version Python 3.6.3
co pokazało mi Python 3.6.3 . Więc wyraźnie mój iskrownik używa systemu Python w wersji 3.6.3.
Teraz, gdy ustawiłem mój sterownik iskier, aby uruchamiał jupyter przez ustawienie
PYSPARK_DRIVER_PYTHON=jupyter
więc muszę sprawdzić, której wersji Pythona używa jupyter.Aby to zrobić, otwórz Anaconda Prompt i naciśnij
python --version Python 3.5.X :: Anaconda, Inc.
Tutaj mam jupyter Python używa wersji 3.5.x. . Możesz sprawdzić tę wersję również w dowolnym Notatniku (Pomoc-> Informacje).
Teraz muszę zaktualizować jupyter Python do wersji v3.6.6 . Aby to zrobić, otwórz Anaconda Prompt i naciśnij
Spowoduje to wyświetlenie listy dostępnych wersji Pythona w programie Anaconda. Zainstaluj żądany za pomocą
Teraz mam obie instalacje Pythona w tej samej wersji 3.6.3 Spark nie powinien być zgodny i nie był, gdy uruchomiłem Action na sterowniku Spark. Wyjątek minął. Miłego kodowania ...
źródło
Jeśli chcesz zmienić tylko wersję Pythona dla bieżącego zadania, możesz użyć następującego polecenia pyspark start:
PYSPARK_DRIVER_PYTHON=/home/user1/anaconda2/bin/python PYSPARK_PYTHON=/usr/local/anaconda2/bin/python pyspark --master ..
źródło
Spójrz na poniższy fragment:
#setting environment variable for pyspark in linux||ubuntu #goto --- /usr/local/spark/conf #create a new file named spark-env.sh copy all content of spark-env.sh.template to it #then add below lines to it, with path to python PYSPARK_PYTHON="/usr/bin/python3" PYSPARK_DRIVER_PYTHON="/usr/bin/python3" PYSPARK_DRIVER_PYTHON_OPTS="notebook --no-browser" #i was running python 3.6 ||run - 'which python' in terminal to find the path of python
źródło
Używam następującego środowiska
? python --version; ipython --version; jupyter --version Python 3.5.2+ 5.3.0 5.0.0
a poniższe aliasy dobrze mi odpowiadają
alias pyspark="PYSPARK_PYTHON=/usr/local/bin/python3 PYSPARK_DRIVER_PYTHON=ipython ~/spark-2.1.1-bin-hadoop2.7/bin/pyspark --packages graphframes:graphframes:0.5.0-spark2.1-s_2.11" alias pysparknotebook="PYSPARK_PYTHON=/usr/bin/python3 PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS='notebook' ~/spark-2.1.1-bin-hadoop2.7/bin/pyspark --packages graphframes:graphframes:0.5.0-spark2.1-s_2.11"
W notebooku skonfigurowałem środowisko w następujący sposób
from pyspark.context import SparkContext sc = SparkContext.getOrCreate()
źródło
Błąd
Poprawka (dla środowiska Cloudera)
Edytuj ten plik:
/opt/cloudera/parcels/cdh5.5.4.p0.9/lib/spark/conf/spark-env.sh
Dodaj te linie:
export PYSPARK_PYTHON=/usr/bin/python export PYSPARK_DRIVER_PYTHON=python
źródło
Wpadłem na to dzisiaj w pracy. Administrator uznał za rozsądne zakodowanie Pythona 2.7 na stałe jako
PYSPARK_PYTHON
iPYSPARK_DRIVER_PYTHON
w$SPARK_HOME/conf/spark-env.sh
. Nie trzeba dodawać, że zepsuło to wszystkie nasze zadania, które wykorzystują inne wersje lub środowiska Pythona (co stanowi> 90% naszych zadań). @PhillipStich słusznie wskazuje, że nie zawsze możesz mieć uprawnienia do zapisu do tego pliku, jak to ma miejsce w naszym przypadku. Podczas gdy ustawienie konfiguracji wspark-submit
wywołaniu jest opcją, inną alternatywą (podczas pracy w trybie przędzy / klastra) jest ustawienieSPARK_CONF_DIR
zmiennej środowiskowej tak, aby wskazywała na inny skrypt konfiguracyjny. Tam możesz ustawić swój PYSPARK_PYTHON i inne opcje, których możesz potrzebować. Szablon można znaleźć w kodzie źródłowym spark-env.sh na github .źródło
W moim przypadku (Ubuntu 18.04) uruchomiłem ten kod w terminalu:
a następnie zredagowano
SPARK_HOME
w następujący sposób:export SPARK_HOME=/home/muser/programs/anaconda2019/lib/python3.7/site-packages/pyspark export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
Robiąc to, moja
SPARK_HOME
wola odnosi się dopyspark
pakietu, który zainstalowałem wsite-package
.Aby dowiedzieć się, jak korzystać
vim
, przejdź do tego linku.źródło
Biegać:
ls -l /usr/local/bin/python*
Pierwszy wiersz w tym przykładzie pokazuje link symboliczny python3. Aby ustawić go jako domyślne łącze symboliczne Pythona, uruchom następujące polecenie:
ln -s -f /usr/local/bin/python3 /usr/local/bin/python
następnie przeładuj powłokę.
źródło
Miałem ten sam problem, po prostu zapomniałem aktywować swoje wirtualne środowisko. Dla każdego, kto również miał mentalną pustkę.
źródło
Jeśli pracujesz na komputerze Mac, użyj następujących poleceń
export SPARK_HOME=`brew info apache-spark | grep /usr | tail -n 1 | cut -f 1 -d " "`/libexec export PYTHONPATH=$SPARK_HOME/python:$PYTHONPATH export HADOOP_HOME=`brew info hadoop | grep /usr | head -n 1 | cut -f 1 -d " "`/libexec export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/:$LD_LIBRARY_PATH export PYSPARK_PYTHON=python3
Jeśli używasz innego systemu operacyjnego, sprawdź poniższe łącze: https://github.com/GalvanizeDataScience/spark-install
źródło