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

87

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

Кевин
источник

Ответы:

34

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

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

Холден
источник
3
@Kevin - У меня такая же проблема, не могли бы вы опубликовать свое решение относительно того, какие изменения вы внесли в spark-evn.sh.
Дев Патель,
1
Это правильный способ вызвать переменные PATH в Spark вместо изменения .bashrc.
CᴴᴀZ 03
Почему для использования Python 3 требуется @Holden?
jerzy
Spark может работать на python2, но в этом случае пользователь пытался указать python3 в своем вопросе. Какая бы версия Python ни была, это нужно делать последовательно.
Холден
79

У меня работает установка 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/

fccoelho
источник
5
В Spark 2.1 есть ошибка, связанная с опцией "IPYTHON = 1". Сообщение об ошибке: «IPYTHON и IPYTHON_OPTS удалены в Spark 2.0+. Удалите их из среды и вместо этого установите PYSPARK_DRIVER_PYTHON и PYSPARK_DRIVER_PYTHON_OPTS».
notilas
1
PYSPARK_PYTHON=python3устанавливает версию Python для рабочих, верно?
Джо
При запуске из PyCharm добавьте PYSPARK_PYTHON=python3; PYSPARK_DRIVER_PYTHON=ipython3в «Выполнить»> «Изменить конфигурации»> {your_run_config}> «Переменные среды». Чтобы сделать их значениями по умолчанию для всех конфигураций запуска, обновите переменные среды для желаемых шаблонов в разделе «Выполнить»> «Изменить конфигурации»> «Шаблоны»
MisterEd
28

В моем случае помогли:

import os

os.environ["SPARK_HOME"] = "/usr/local/Cellar/apache-spark/1.5.1/"
os.environ["PYSPARK_PYTHON"]="/usr/local/bin/python3"
Николай Быстрицкий
источник
1
это работает для меня после установки PYSPARK_DRIVER_PYTHON на то же значение с PYSPARK_PYTHON.
buxizhizhoum
12

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

Джеймс Кларк
источник
Как запустить этот файл?
Volatil3
Мне пришлось переименовать spark-env.sh.template в spark-env.sh, а затем добавить в конец файла экспорта PYSPARK_PYTHON = / usr / local / bin / python3 export PYSPARK_DRIVER_PYTHON = / usr / local / bin / python3. Мне нужно было выяснить, где был мой python3, через какой python3
danivicario
10

Если вы используете 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"
Филипп Стич
источник
9

Я только что столкнулся с той же проблемой, и вот шаги, которые я выполняю, чтобы предоставить версию 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. Отредактируйте файл и напишите следующие три строки

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

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

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

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

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

Selknam
источник
2
Обратите внимание, что рекомендуется создать cpфайл spark-env.sh.templateкак новый, spark-env.shа затем изменить новый файл, а не изменять имя и содержимое шаблона. Шаблон должен оставаться справочным.
et_l
@et_l Вы правы, я только что немного изменил ответ с учетом вашего комментария, спасибо!
selknam
5

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

  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работает как шарм ~
Фрэнк
источник
ваш комментарий - чистое золото после того, как вы потратили час. Спасибо
cheapcoder
Большое спасибо. Я протестировал множество решений. Ваш сработал очень хорошо.
Muser
3

Я запускал его в IPython (как описано в этой ссылке Яцеком Василевски ) и получал это исключение; Добавлен 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"
 }
Алекс Пуннен
источник
2

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

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

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 Питон с помощью v3.5.x . Вы также можете проверить эту версию в любом Блокноте (Справка-> О программе).

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

поиск conda python

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

conda install python = 3.6.3

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

Ризви Хасан
источник
1

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

    PYSPARK_DRIVER_PYTHON=/home/user1/anaconda2/bin/python PYSPARK_PYTHON=/usr/local/anaconda2/bin/python pyspark --master ..
Питер Пен
источник
1

Пожалуйста, посмотрите на приведенный ниже фрагмент:

#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
Джастин Варугезе
источник
Пожалуйста, проверьте шаблоны перед публикацией.
Дипеш Рехи,
0

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

? 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()
Джордж Фишер
источник
0

ошибка

«Исключение: версия Python в 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
    
Уильям Ли
источник
0

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

Grr
источник
0

В моем случае (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

Таким образом, my SPARK_HOMEбудет ссылаться на pysparkпакет, который я установил в site-package.

Чтобы узнать, как пользоваться vim, перейдите по этой ссылке.

Muser
источник
0

Бегать:

ls -l /usr/local/bin/python*

Первая строка в этом примере показывает символическую ссылку python3. Чтобы установить его как символическую ссылку Python по умолчанию, выполните следующее:

ln -s -f /usr/local/bin/python3 /usr/local/bin/python

затем перезагрузите оболочку.

Хиллари Мурефу
источник
0

У меня была такая же проблема, просто забыл активировать виртуальную среду. Для всех, у кого также было пустое мышление.

Chadmc
источник
0

Если вы работаете на 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

Хуан Хосе
источник