Spark에서 드라이버의 Python 버전을 어떻게 설정합니까?


88

스파크와 함께 파이썬 3을 사용할 수 있도록 스파크 1.4.0-rc2를 사용하고 있습니다. export PYSPARK_PYTHON=python3.bashrc 파일에 추가 하면 python 3과 함께 Spark를 대화 형으로 실행할 수 있습니다. 그러나 로컬 모드에서 독립 실행 형 프로그램을 실행하려면 오류가 발생합니다.

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을 사용하여 시작해야합니다. 당신의 앱.

또한 환경 변수를에서 설정했는지 확인하십시오 ./conf/spark-env.sh(존재하지 않는 경우 spark-env.sh.template기본으로 사용할 수 있음 ).


3
@Kevin-같은 문제가 있습니다. spark-evn.sh에서 변경 한 사항에 대한 솔루션을 게시 해 주시겠습니까?
Dev Patel

1
이것은 .NET을 수정하는 대신 Spark에 PATH 변수를 유도하는 올바른 방법입니다 .bashrc.
CᴴᴀZ

왜 파이썬 3을 사용하려면 @Holden이 필요합니까?
jerzy

Spark는 python2에서 실행할 수 있지만이 경우 사용자는 질문에 python3을 지정하려고했습니다. 어떤 파이썬 버전이든 일관되게 수행되어야합니다.
Holden

83

python3에 대한 설정 PYSPARK_PYTHON=python3PYSPARK_DRIVER_PYTHON=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
"IPYTHON = 1"옵션과 관련된 Spark 2.1에 오류가 있습니다. 오류 메시지는 "IPYTHON 및 IPYTHON_OPTS가 Spark 2.0 이상에서 제거되었습니다. 환경에서 제거하고 대신 PYSPARK_DRIVER_PYTHON 및 PYSPARK_DRIVER_PYTHON_OPTS를 설정하십시오."입니다.
notilas

1
PYSPARK_PYTHON=python3작업자의 Python 버전을 설정합니다.
Joe

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

./conf/spark-env.sh파일 에서 적절한 환경 변수를 설정하여 드라이버의 Python 버전을 지정할 수 있습니다 . 아직 존재하지 않는 경우 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파일 및 기타 변수를 설정할 필요가 없습니다,이는 관련 파이썬 바이너리 경로 (에 확인 올바른지 가정, 당신이 원하는 일을해야한다 which). 비슷한 문제가 있었고 이로 인해 해결되었습니다.


이 파일을 어떻게 실행합니까?
Volatil3 2017-06-16

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 19

10

대규모 조직에서 Spark를 실행 중이고 /spark-env.sh 파일을 업데이트 할 수없는 경우 환경 변수 내보내기가 작동하지 않을 수 있습니다.

--conf런타임에 작업을 제출할 때 옵션을 통해 특정 Spark 설정을 추가 할 수 있습니다 .

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 버전을 제공하기 위해 따르는 단계입니다. 2.6 대신 Python 2.7로 PySpark 작업을 실행하고 싶었습니다.

  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 독립 실행 형 버전을 다운로드하면 PySpark를 실행할 Python 버전을 설정할 수 있습니다.


2
권장 사항은 새 cp파일 spark-env.sh.template로 파일 을 만든 spark-env.sh다음 템플릿의 이름과 내용을 변경하는 대신 새 파일을 변경하는 것입니다. 템플릿은 참조로 남아 있어야합니다.
et_l

@et_l 당신이 맞아요, 당신의 의견을 고려하여 답변을 약간 수정했습니다. 감사합니다!
selknam

5

동일한 오류 메시지가 표시되고 위에서 언급 한 세 가지 방법을 시도했습니다. 나는 그 결과를 다른 사람들에 대한 보완 적 참고 자료로 나열했습니다.

  1. 의 변경 PYTHON_SPARKPYTHON_DRIVER_SPARK값이 spark-env.sh작동하지 않습니다.
  2. os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5" os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"나를 위해 작동하지 않는 python 스크립트 내부의 값을 변경하십시오 .
  3. ~/.bashrc작품 의 가치를 매력처럼 바꿔보세요 ~

귀하의 코멘트는 Hour.Thanks를 보낸 후 순금입니다.
cheapcoder

대단히 감사합니다. 나는 많은 솔루션을 테스트했습니다. 당신은 아주 잘 작동했습니다.
Muser

3

나는 그것을 IPython에서 실행하고 있었고 ( Jacek Wasilewski 의이 링크 에서 설명 했듯이 )이 예외가 발생했습니다. PYSPARK_PYTHONIPython 커널 파일에 추가 되고 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

Windows의 독립 실행 형 스파크 에서 동일한 문제가 발생 했습니다 . 내 수정 버전은 다음과 같습니다. 환경 변수를 다음과 같이 설정했습니다.

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

이 설정으로 pyspark에서 Action을 실행하고 다음 예외가 발생했습니다.

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.

spark-worker 가 사용 하는 파이썬 버전을 확인하려면 cmd 프롬프트 에서 다음을 누르십시오 .

python --version
Python 3.6.3

나에게 Python 3.6.3 을 보여주었습니다 . 그래서 분명히 내 스파크 작업자 는 v3.6.3 인 시스템 파이썬을 사용하고 있습니다.

이제 스파크 드라이버 를 설정 PYSPARK_DRIVER_PYTHON=jupyter하여 jupyter를 실행하도록 설정 하므로 jupyter가 사용하는 Python 버전을 확인해야합니다.

개방이 검사 수행 아나콘다 프롬프트 및 히트를

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

여기 jupyter python이 v3.5.x를 사용하고 있습니다. 이 버전은 모든 노트북 (도움말-> 정보)에서도 확인할 수 있습니다.

이제 jupyter python을 v3.6.6 버전으로 업데이트해야합니다 . 위로 개폐 작업을 수행하려면 아나콘다 프롬프트 및 히트

conda 검색 파이썬

그러면 Anaconda에서 사용 가능한 파이썬 버전 목록이 제공됩니다. 원하는 것을 설치하십시오

conda 설치 python = 3.6.3

이제 동일한 버전 3.6.3의 Python 설치가 모두 있습니다. Spark는이를 준수하지 않아야하며 Spark-driver에서 Action을 실행할 때는 그렇지 않습니다. 예외가 사라졌습니다. 행복한 코딩 ...


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

게시하기 전에 템플릿을 확인하십시오.
Deepesh Rehi

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은 드라이버 2.7의 버전과 2.6 버전이 다릅니다. 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

오늘 직장에서 이것을 만났습니다. 관리자는 파이썬 2.7 하드 코드는 신중한 생각 PYSPARK_PYTHONPYSPARK_DRIVER_PYTHON$SPARK_HOME/conf/spark-env.sh. 말할 필요도없이 이것은 다른 파이썬 버전이나 환경을 활용하는 모든 작업을 망가 뜨 렸습니다 (우리 작업의 90 % 이상). @PhillipStich는 우리의 경우처럼이 파일에 대한 쓰기 권한이 항상있는 것은 아니라는 점을 올바르게 지적합니다. spark-submit호출 에서 구성을 설정하는 것은 옵션이지만 다른 대안 (얀 / 클러스터 모드에서 실행되는 경우)은 SPARK_CONF_DIR다른 구성 스크립트를 가리 키도록 환경 변수를 설정하는 것입니다. 거기에서 PYSPARK_PYTHON 및 필요한 기타 옵션을 설정할 수 있습니다. 템플릿은 githubspark-env.sh 소스 코드에서 찾을 수 있습니다 .


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

다른 OS를 사용하는 경우 다음 링크를 확인하십시오. https://github.com/GalvanizeDataScience/spark-install

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.