Как установить версию драйвера для Python в спарк?
Я использую spark 1.4.0-rc2, поэтому я могу использовать python 3 с spark. Если я добавлю export PYSPARK_PYTHON=python3
к моему файлу.bashrc я могу запустить spark в интерактивном режиме с python 3. Однако, если я хочу запустить отдельную программу в локальном режиме, я получаю сообщение об ошибке:
Exception: Python in worker has different version 3.4 than that in driver 2.7, PySpark cannot run with different minor versions
Как мне указать версию python для драйвера? настройка export PYSPARK_DRIVER_PYTHON=python3
не работал
20 ответов
Вы должны убедиться, что запускаемый вами автономный проект запускается с Python 3. Если вы отправляете свою автономную программу через spark-submit, то она должна работать нормально, но если вы запускаете ее с python, убедитесь, что вы используете python3 для запуска ваше приложение.
Также убедитесь, что вы установили переменные env в ./conf/spark-env.sh
(если он не существует, вы можете использовать spark-env.sh.template
в качестве базы.)
Настройка PYSPARK_PYTHON=python3
а также PYSPARK_DRIVER_PYTHON=python3
у меня оба к python3 работает. Я сделал это с помощью экспорта в моем.bashrc. В конце концов, это переменные, которые я создаю:
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"
Я также следовал этому руководству, чтобы заставить его работать в блокноте Ipython3: http://ramhiser.com/2015/02/01/configuring-ipython-notebook-support-for-pyspark/
Помогло в моем случае:
import os
os.environ["SPARK_HOME"] = "/usr/local/Cellar/apache-spark/1.5.1/"
os.environ["PYSPARK_PYTHON"]="/usr/local/bin/python3"
Вы можете указать версию Python для драйвера, установив соответствующие переменные среды в ./conf/spark-env.sh
файл. Если он еще не существует, вы можете использовать spark-env.sh.template
предоставленный файл, который также включает в себя множество других переменных.
Вот простой пример spark-env.sh
файл для установки соответствующих переменных среды Python:
#!/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
В этом случае он устанавливает версию Python, используемую рабочими / исполнителями, на Python3, а версию драйвера Python на iPython для более приятной оболочки для работы.
Если у вас еще нет spark-env.sh
файл, и не нужно устанавливать какие-либо другие переменные, эта должна делать то, что вы хотите, при условии, что пути к соответствующим двоичным файлам Python являются правильными (проверьте с помощью which
). У меня была похожая проблема, и это решило ее.
Если вы используете Spark в более крупной организации и не можете обновить файл /spark-env.sh, экспорт переменных среды может не работать.
Вы можете добавить конкретные настройки Spark через --conf
опция при отправке работы во время выполнения.
pyspark --master yarn --[other settings]\
--conf "spark.pyspark.python=/your/python/loc/bin/python"\
--conf "spark.pyspark.driver.python=/your/python/loc/bin/python"
Я только что столкнулся с той же проблемой, и вот шаги, которые я следую, чтобы предоставить версию Python. Я хотел запускать свои задания PySpark с Python 2.7 вместо 2.6.
Перейдите в папку, где
$SPARK_HOME
указывает на (в моем случае/home/cloudera/spark-2.1.0-bin-hadoop2.7/
)Под папкой
conf
есть файл с именемspark-env.sh
, Если у вас есть файл с именемspark-env.sh.template
вам нужно будет скопировать файл в новый файл с именемspark-env.sh
,Отредактируйте файл и напишите следующие три строки
export PYSPARK_PYTHON = / usr / local / bin / python2.7
export PYSPARK_DRIVER_PYTHON = / usr / local / bin / python2.7
export SPARK_YARN_USER_ENV = "PYSPARK_PYTHON = / usr / local / bin / python2.7"
Сохраните его и снова запустите приложение:)
Таким образом, если вы загружаете новую автономную версию Spark, вы можете установить версию Python, для которой вы хотите запустить PySpark.
Я столкнулся с тем же сообщением об ошибке, и я попробовал три способа, упомянутых выше. Я перечислил результаты в качестве дополнительной ссылки на других.
- Изменить
PYTHON_SPARK
а такжеPYTHON_DRIVER_SPARK
значение вspark-env.sh
не работает для меня - Измените значение внутри скрипта Python, используя
os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5"
os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"
не работает для меня - Изменить значение в
~/.bashrc
работает как шарм ~
Я запускал его в IPython (как описано в этой ссылке Яцеком Василевским) и получал это исключение; добавленной PYSPARK_PYTHON
к файлу ядра IPython и использовать ноутбук Jupyter для запуска, и начал работать.
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"
}
Я получил ту же самую проблему на отдельной искре в окнах. Моя версия исправления выглядит так: мои переменные окружения установлены ниже
PYSPARK_SUBMIT_ARGS="pyspark-shell"
PYSPARK_DRIVER_PYTHON=jupyter
PYSPARK_DRIVER_PYTHON_OPTS='notebook' pyspark
С этим параметром я выполнил действие на pyspark и получил следующее исключение:
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.
Чтобы проверить, с какой версией Python использует мой spark-работник, нажмите в командной строке следующее.
python --version
Python 3.6.3
который показал мне Python 3.6.3. Ясно, что мой искровой работник использует системный питон v3.6.3.
Теперь, когда я настроил свой искровой драйвер для запуска Jupyter, установив PYSPARK_DRIVER_PYTHON=jupyter
поэтому мне нужно проверить версию Python, которую использует jupyter.
Для этого откройте Anaconda Prompt и нажмите
python --version
Python 3.5.X :: Anaconda, Inc.
Здесь получил Python Jupyter использует v3.5.x. Вы можете проверить эту версию также в любой записной книжке (Справка-> О программе).
Теперь мне нужно обновить Python Jupyter до версии v3.6.6. Для этого откройте Anaconda Prompt и нажмите
conda search python
Это даст вам список доступных версий Python в Anaconda. Установите желаемый с
Конда установить Python=3.6.3
Теперь у меня есть обе установки Python одной и той же версии 3.6.3. Spark не должен соответствовать, и это не было, когда я запускал Action на Spark-драйвере. Исключение прошло. Удачного кодирования...
Пожалуйста, посмотрите на приведенный ниже фрагмент:
#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
Если вы хотите изменить только версию Python для текущей задачи, вы можете использовать следующую команду запуска pyspark:
PYSPARK_DRIVER_PYTHON=/home/user1/anaconda2/bin/python PYSPARK_PYTHON=/usr/local/anaconda2/bin/python pyspark --master ..
Я столкнулся с той же проблемой, работая с pycharm и spark. Чтобы исправить эту ошибку, я выполнил следующие шаги, чтобы исправить ее.
(1) Click on Run option in pycharm menu bar.
(2) Click on Edit Configurations option.
(3) Click on Environment Variables and write down given below lines
as per your location.
PYSPARK_PYTHON=/usr/bin/python3.6;
PYSPARK_DRIVER_PYTHON=/usr/bin/python3.6;
SPARK_HOME=/home/xxxxxx/Desktop/xxxx/spark
У меня это сработало, так что вы тоже можете попробовать.
Спасибо :)
У меня была такая же проблема, просто забыл активировать виртуальную среду. Для всех, у кого также была пустота в уме.
Наткнулся сегодня на работу. Администратор посчитал целесообразным жесткий код Python 2.7 как PYSPARK_PYTHON
а также PYSPARK_DRIVER_PYTHON
в $SPARK_HOME/conf/spark-env.sh
, Излишне говорить, что это нарушило все наши рабочие места, в которых используются любые другие версии или среды Python (что составляет> 90% наших рабочих мест). @PhillipStich правильно указывает, что у вас не всегда могут быть права на запись для этого файла, как в нашем случае. При настройке конфигурации в spark-submit
Вызов является опцией, другой альтернативой (при работе в режиме пряжи / кластера) является установка SPARK_CONF_DIR
переменная окружения, указывающая на другой конфигурационный скрипт. Там вы можете установить свой PYSPARK_PYTHON и любые другие параметры, которые вам могут понадобиться. Шаблон можно найти в исходном коде spark-env.sh на github.
Я столкнулся с той же проблемой при использовании PySpark внутри Jupyter Notebooks. Как ни странно, в итоге я обнаружил, что если запустить автономный кластер Spark вне среды conda (обычно я использую
start-all.sh
&
stop-all.sh
скрипты внутри
SPARK_HOME/sbin
) проблема будет решена!
Итак, просто остановите искровой кластер, а затем отключите среду conda с помощью
conda deactivate
команду, а затем запустите кластер.
PS: В настоящее время я не знаю, почему это происходит, любые идеи приветствуются.
В моем случае (Ubuntu 18.04) я запустил этот код в терминале:
sudo vim ~/.bashrc
а затем отредактировал SPARK_HOME
следующее:
export SPARK_HOME=/home/muser/programs/anaconda2019/lib/python3.7/site-packages/pyspark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
Поступая так, мой SPARK_HOME
будет относиться к pyspark
пакет, который я установил в site-package
.
Чтобы узнать, как использовать vim
перейдите по этой ссылке.
ошибка
"Исключение: Python in worker имеет версию 2.6 отличную от той, что в драйвере 2.7, PySpark не может работать с другими второстепенными версиями".
Исправить (для среды Cloudera)
Отредактируйте этот файл:
/opt/cloudera/parcels/cdh5.5.4.p0.9/lib/spark/conf/spark-env.sh
Добавьте эти строки:
export PYSPARK_PYTHON=/usr/bin/python export PYSPARK_DRIVER_PYTHON=python
Бегать:
ls -l /usr/local/bin/python*
Первая строка в этом примере показывает символическую ссылку python3. Чтобы установить его как символическую ссылку Python по умолчанию, выполните следующее:
ln -s -f /usr/local/bin/python3 /usr/local/bin/python
затем перезагрузите оболочку.
Я использую следующую среду
? python --version; ipython --version; jupyter --version
Python 3.5.2+
5.3.0
5.0.0
и следующие псевдонимы хорошо работают для меня
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"
В записной книжке я настроил среду следующим образом
from pyspark.context import SparkContext
sc = SparkContext.getOrCreate()
Если вы работаете на Mac, используйте следующие команды
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
Если вы используете другую ОС, проверьте следующую ссылку: https://github.com/GalvanizeDataScience/spark-install