Подтвердить что ты не робот

Как установить версию драйвера python в искровом режиме?

Я использую искру 1.4.0-rc2, поэтому я могу использовать python 3 с искрой. Если я добавлю export PYSPARK_PYTHON=python3 в мой .bashrc файл, я могу запустить искру интерактивно с 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 не работает.

4b9b3361

Ответ 1

Вам нужно убедиться, что автономный проект, который вы запускаете, запускается с Python 3. Если вы отправляете свою автономную программу через spark-submit, тогда она должна работать нормально, но если вы запускаете ее с помощью python, убедитесь, что вы используете python3 для запуска ваше приложение.

Кроме того, убедитесь, что вы установили переменные env в ./conf/spark-env.sh (если он не существует, вы можете использовать spark-env.sh.template в качестве базы.)

Ответ 2

Установка 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/

Ответ 3

Помог в моем случае:

import os

os.environ["SPARK_HOME"] = "/usr/local/Cellar/apache-spark/1.5.1/"
os.environ["PYSPARK_PYTHON"]="/usr/local/bin/python3"

Ответ 4

Вы можете указать версию 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). У меня была аналогичная проблема, и это исправило это.

Ответ 5

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

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

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

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

    экспорт PYSPARK_PYTHON =/usr/local/bin/python2.7

    экспорт PYSPARK_DRIVER_PYTHON =/usr/local/bin/python2.7

    export SPARK_YARN_USER_ENV = "PYSPARK_PYTHON =/usr/local/bin/python2.7"

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

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

Ответ 6

Я запускал его в IPython (как описано в этой ссылке Jacek Wasilewski) и получал это исключение; Добавлен PYSPARK_PYTHON в файл ядра IPython и используется jupyter notebook для запуска и начал работать.

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"
 }

Ответ 7

Если вы используете Spark в более крупной организации и не можете обновить файл /spark-env.sh, экспорт переменных среды может не работать.

Вы можете добавить определенные параметры искры через параметр --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"

Ответ 8

ошибка

"Исключение: у Python у рабочего есть другая версия 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
    

Ответ 9

Я использую следующую среду

? 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()

Ответ 10

Если вы хотите изменить версию python для текущей задачи, вы можете использовать следующую команду запуска pyspark:

    PYSPARK_DRIVER_PYTHON=/home/user1/anaconda2/bin/python PYSPARK_PYTHON=/usr/local/anaconda2/bin/python pyspark --master ..

Ответ 11

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

  • Изменить значение PYTHON_SPARK и PYTHON_DRIVER_SPARK в spark-env.sh не работает для меня.
  • Измените значение внутри python script с помощью os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5" os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5" не работает для меня.
  • Изменить значение в ~/.bashrc работает как заклинание ~

Ответ 12

Выйдя на это сегодня на работе. Администратор счел разумным использовать жесткий код Python 2.7 как PYSPARK_PYTHON и PYSPARK_DRIVER_PYTHON в $SPARK_HOME/conf/spark-env.sh. Излишне говорить, что это сломало все наши рабочие места, которые используют любые другие версии или среды python (что составляет> 90% наших рабочих мест). @PhillipStich правильно указывает, что у вас могут не всегда быть разрешения на запись для этого файла, как и в нашем случае. Хотя настройка конфигурации в вызове spark-submit является опцией, другой альтернативой (при запуске в режиме пряжи/кластера) является установка SPARK_CONF_DIR среды SPARK_CONF_DIR для указания на другой сценарий конфигурации. Там вы можете установить PYSPARK_PYTHON и любые другие параметры, которые могут вам понадобиться. Шаблон можно найти в исходном коде spark-env.sh на github.

Ответ 13

У меня такая же проблема на автономной искре в окнах. Моя версия исправления выглядит так: у меня были настройки переменных среды, как показано ниже.

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 работает мой искровой рабочий, введите в командной строке cmd следующее.

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.

Здесь получил jupyter python, используя v3.5.x. Вы можете проверить эту версию и в любом ноутбуке (Help-> О программе).

Теперь мне нужно обновить jupyter python до версии v3.6.6. Для этого откройте Anaconda Prompt и нажмите

Конда поиск python

Это даст вам список доступных версий python в Anaconda. Установите желаемый

conda install python = 3.6.3

Теперь у меня есть и установка Python той же версии 3.6.3. Искра не должна соответствовать, и это не произошло, когда я запускал Action on Spark-driver. Исключение ушло. Счастливое кодирование...