Как установить версию драйвера для 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.

  1. Перейдите в папку, где $SPARK_HOME указывает на (в моем случае /home/cloudera/spark-2.1.0-bin-hadoop2.7/)

  2. Под папкой conf есть файл с именем spark-env.sh, Если у вас есть файл с именем spark-env.sh.template вам нужно будет скопировать файл в новый файл с именем spark-env.sh ,

  3. Отредактируйте файл и напишите следующие три строки

    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"

  4. Сохраните его и снова запустите приложение:)

Таким образом, если вы загружаете новую автономную версию Spark, вы можете установить версию Python, для которой вы хотите запустить PySpark.

Я столкнулся с тем же сообщением об ошибке, и я попробовал три способа, упомянутых выше. Я перечислил результаты в качестве дополнительной ссылки на других.

  1. Изменить PYTHON_SPARK а также PYTHON_DRIVER_SPARK значение в spark-env.sh не работает для меня
  2. Измените значение внутри скрипта Python, используя os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5"os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5" не работает для меня
  3. Изменить значение в ~/.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

Другие вопросы по тегам