Як встановити версію python драйвера в іскрі?


87

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

Відповіді:


34

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

Також переконайтеся, що ви встановили свої змінні env ./conf/spark-env.sh(якщо вони не існують, ви можете використовувати їх spark-env.sh.templateяк основу.)


3
@Kevin - У мене така ж проблема, чи не могли б ви, будь ласка, опублікувати своє рішення щодо того, яку зміну ви внесли у spark-evn.sh.
Dev Patel

1
Це правильний спосіб викликати змінні PATH до Spark, замість того, щоб модифікувати .bashrc.
CᴴᴀZ

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


5
На іскрі 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, а потім додати до хвоста файлу export 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.


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творах як шарм ~

Ваш коментар - чисте золото після витраченої години. Дякую
дешевий кодер

Дуже дякую. Я протестував багато рішень. Ваш працював дуже гарно.
Музей

3

Я запускав його в 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"
 }

2

Я отримав те саме питання щодо автономної іскри у вікнах . Моя версія виправлення така: у мене для змінних середовища було встановлено як нижче

PYSPARK_SUBMIT_ARGS="pyspark-shell"
PYSPARK_DRIVER_PYTHON=jupyter
PYSPARK_DRIVER_PYTHON_OPTS='notebook' pyspark

За допомогою цього налаштування я виконав Action на 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-worker , натисніть наступне в підказці cmd .

python --version
Python 3.6.3

який показав мені Python 3.6.3 . Очевидно, що мій працівник іскри використовує системний python, який є v3.6.3.

Тепер, коли я встановив свій драйвер іскри на запуск jupyter, встановивши, PYSPARK_DRIVER_PYTHON=jupyterмені потрібно перевірити версію python, яку використовує jupyter.

Для цього відкрийте підказку Anaconda і натисніть

python --version
Python 3.5.X :: Anaconda, Inc.

Тут отримав jupyter Пітон з допомогою v3.5.x . Ви можете перевірити цю версію також у будь-якому блокноті (Довідка-> Про мене).

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

conda пошук python

Це дасть вам список доступних версій python в Anaconda. Встановіть бажаний за допомогою

conda встановити python = 3.6.3

Тепер у мене встановлено обидві версії Python тієї ж версії 3.6.3. Spark не повинен відповідати і не відповідав, коли я запускав Action на драйвері Spark. Виняток зник. Щасливого кодування ...


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_PYTHONв $SPARK_HOME/conf/spark-env.sh. Само собою зрозуміло, що це зламало всі наші робочі місця, які використовують будь-які інші версії python або середовища (що становить> 90% наших робочих місць). @PhillipStich правильно зазначає, що у вас не завжди можуть бути дозволи на запис для цього файлу, як це відбувається в нашому випадку. Хоча встановлення конфігурації у spark-submitвиклику є опцією, іншою альтернативою (при роботі в режимі пряжі / кластера) є встановлення SPARK_CONF_DIRзмінної середовища на інший сценарій конфігурації. Там ви можете встановити свій PYSPARK_PYTHON та будь-які інші варіанти, які можуть вам знадобитися. Шаблон можна знайти у вихідному коді spark-env.sh на github .


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

Роблячи це, я SPARK_HOMEбуду посилатися на pysparkпакет, який я встановив у site-package.

Щоб дізнатися, як користуватися vim, перейдіть за цим посиланням.


0

Виконати:

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

Перший рядок у цьому прикладі показує символьне посилання python3. Щоб встановити його як символічне посилання пітона за замовчуванням, виконайте наступне:

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

потім перезавантажте свою оболонку.


0

У мене була та сама проблема, просто забув активувати своє віртуальне середовище. Для тих, хто там також мав психічний бланк.


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.