ฉันจะตั้งค่าเวอร์ชันหลามของไดรเวอร์เป็นประกายไฟได้อย่างไร


88

ฉันใช้ 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ไม่ทำงาน

คำตอบ:


34

คุณต้องตรวจสอบให้แน่ใจว่าโปรเจ็กต์แบบสแตนด์อโลนที่คุณกำลังเปิดตัวนั้นเปิดตัวด้วย Python 3 หากคุณส่งโปรแกรมแบบสแตนด์อโลนผ่าน spark-submit ก็น่าจะใช้ได้ดี แต่ถ้าคุณเปิดใช้งานด้วย python ให้แน่ใจว่าคุณใช้ python3 เพื่อเริ่มต้น แอปของคุณ

ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าตัวแปร env ของคุณแล้ว./conf/spark-env.sh(หากไม่มีอยู่คุณสามารถใช้spark-env.sh.templateเป็นฐานได้)


3
@ เควิน - ฉันมีปัญหาเดียวกันโปรดโพสต์วิธีแก้ปัญหาของคุณเกี่ยวกับสิ่งที่คุณเปลี่ยนแปลงใน spark-evn.sh
Dev Patel

1
.bashrcวิธีนี้เป็นวิธีที่ถูกต้องของการกระตุ้นให้เกิดตัวแปรเส้นทางไปยังจุดประกายแทนการแก้ไข
CᴴᴀZ

เหตุใดจึงต้องใช้ python 3 @Holden
jerzy

Spark สามารถทำงานใน python2 แต่ในกรณีนี้ผู้ใช้พยายามระบุ python3 ในคำถาม ไม่ว่าจะเป็น Python เวอร์ชันใดก็ตามจำเป็นต้องทำอย่างสม่ำเสมอ
Holden

83

การตั้งค่า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
มีข้อผิดพลาดบน 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ไปที่ Run> Edit Configurations> {your_run_config}> Environment Variables หากต้องการกำหนดให้เป็นค่าเริ่มต้นสำหรับการกำหนดค่าการรันทั้งหมดให้อัปเดตตัวแปรสภาพแวดล้อมสำหรับเทมเพลตที่ต้องการภายใต้เรียกใช้> แก้ไขการกำหนดค่า> เทมเพลต
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 ส่งออก 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ผลงานอย่างมีเสน่ห์ ~

ความคิดเห็นของคุณคือทองคำบริสุทธิ์หลังจากใช้เวลาหนึ่งชั่วโมงขอบคุณ
cheapcoder

ขอบคุณมาก. ฉันทดสอบวิธีแก้ปัญหามากมาย คุณทำงานได้ดีมาก
มูเซอ

3

ฉันใช้งานใน IPython (ตามที่อธิบายไว้ในลิงค์นี้โดย Jacek Wasilewski ) และได้รับข้อยกเว้นนี้ เพิ่ม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 เวอร์ชันใดที่ช่างจุดประกายของฉันใช้ให้กดสิ่งต่อไปนี้ในพรอมต์cmd

python --version
Python 3.6.3

ซึ่งแสดงให้ฉันเห็นงูใหญ่ 3.6.3 เห็นได้ชัดว่าพนักงานจุดประกายของฉันใช้ python ระบบซึ่งเป็น v3.6.3

ตอนนี้เมื่อฉันตั้งค่าspark-driverให้รัน jupyter โดยการตั้งค่าPYSPARK_DRIVER_PYTHON=jupyterดังนั้นฉันจึงต้องตรวจสอบ jupyter เวอร์ชัน python ที่ใช้อยู่

หากต้องการทำเครื่องหมายนี้ให้เปิดAnaconda Promptแล้วกด

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

ที่นี่มีหลาม jupyter จะใช้v3.5.x คุณสามารถตรวจสอบเวอร์ชันนี้ได้ในสมุดบันทึก (Help-> About)

ตอนนี้ฉันต้องปรับปรุงหลาม jupyter เป็นรุ่นv3.6.6 ในการทำเช่นนั้นให้เปิดAnaconda Promptแล้วกด

conda python ค้นหา

สิ่งนี้จะให้รายการเวอร์ชันหลามที่มีอยู่ใน Anaconda ติดตั้งที่คุณต้องการด้วย

conda ติดตั้ง python = 3.6.3

ตอนนี้ฉันมีการติดตั้ง Python ทั้งสองเวอร์ชัน 3.6.3 Spark ไม่ควรปฏิบัติตามและไม่เป็นไปตามนั้นเมื่อฉันรัน Action บน 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

โปรดตรวจสอบเทมเพลตก่อนโพสต์
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 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
    

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*

แถวแรกในตัวอย่างนี้แสดง symlink ของ python3 หากต้องการตั้งเป็น symlink เริ่มต้นของ python ให้รันสิ่งต่อไปนี้:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.