Làm cách nào để đặt phiên bản python của trình điều khiển trong spark?


87

Tôi đang sử dụng spark 1.4.0-rc2 nên tôi có thể sử dụng python 3 với spark. Nếu tôi thêm export PYSPARK_PYTHON=python3vào tệp .bashrc của mình, tôi có thể chạy spark tương tác với python 3. Tuy nhiên, nếu tôi muốn chạy một chương trình độc lập ở chế độ cục bộ, tôi gặp lỗi:

Exception: Python in worker has different version 3.4 than that in driver 2.7, PySpark cannot run with different minor versions

Làm cách nào để chỉ định phiên bản python cho trình điều khiển? Cài đặt export PYSPARK_DRIVER_PYTHON=python3không hoạt động.

Câu trả lời:


34

Bạn cần đảm bảo rằng dự án độc lập mà bạn đang khởi chạy được khởi chạy bằng Python 3. Nếu bạn đang gửi chương trình độc lập của mình thông qua spark-submit thì nó sẽ hoạt động tốt, nhưng nếu bạn đang khởi chạy nó bằng python, hãy đảm bảo rằng bạn sử dụng python3 để bắt đầu ứng dụng của bạn.

Ngoài ra, hãy đảm bảo rằng bạn đã đặt các biến env của mình ./conf/spark-env.sh(nếu nó không tồn tại, bạn có thể sử dụng spark-env.sh.templatelàm cơ sở).


3
@Kevin - Tôi đang gặp vấn đề tương tự, bạn có thể vui lòng đăng giải pháp của mình liên quan đến thay đổi bạn đã thực hiện trong spark-evn.sh không.
Dev Patel

1
Đây là cách thích hợp để tạo các biến PATH cho Spark, thay vì sửa đổi .bashrc.
CᴴᴀZ

Tại sao sử dụng python 3 lại bắt buộc phải có @Holden?
jerzy

Spark có thể chạy trong python2, nhưng trong trường hợp này người dùng đang cố gắng chỉ định python3 trong câu hỏi của họ. Dù là phiên bản Python nào thì nó cũng cần được thực hiện nhất quán.
Holden

79

Thiết lập PYSPARK_PYTHON=python3PYSPARK_DRIVER_PYTHON=python3cả hai thành python3 đều phù hợp với tôi. Tôi đã thực hiện việc này bằng cách sử dụng export trong .bashrc của mình. Cuối cùng, đây là những biến tôi tạo:

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"

Tôi cũng đã làm theo hướng dẫn này để làm cho nó hoạt động ngay trong máy tính xách tay Ipython3: http://ramhiser.com/2015/02/01/configuring-ipython-notebook-support-for-pyspark/


5
Đã xảy ra lỗi trên spark 2.1 liên quan đến tùy chọn "IPYTHON = 1". Thông báo lỗi là "IPYTHON và IPYTHON_OPTS đã bị xóa trong Spark 2.0+. Hãy xóa chúng khỏi môi trường và thay vào đó đặt PYSPARK_DRIVER_PYTHON và PYSPARK_DRIVER_PYTHON_OPTS".
notilas

1
PYSPARK_PYTHON=python3đặt phiên bản Python của công nhân, phải không?
Joe

Nếu chạy từ PyCharm, hãy thêm PYSPARK_PYTHON=python3; PYSPARK_DRIVER_PYTHON=ipython3vào Chạy> Chỉnh sửa cấu hình> {your_run_config}> Biến môi trường. Để đặt những điều này làm mặc định cho tất cả các cấu hình đang chạy, hãy cập nhật Biến môi trường cho (các) mẫu mong muốn trong Chạy> Chỉnh sửa cấu hình> Mẫu
MisterEd

28

Đã giúp trong trường hợp của tôi:

import os

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

1
điều này phù hợp với tôi sau khi đặt PYSPARK_DRIVER_PYTHON thành cùng một giá trị với PYSPARK_PYTHON.
buxizhizhoum

12

Bạn có thể chỉ định phiên bản Python cho trình điều khiển bằng cách đặt các biến môi trường thích hợp trong ./conf/spark-env.shtệp. Nếu nó chưa tồn tại, bạn có thể sử dụng spark-env.sh.templatetệp được cung cấp cũng bao gồm nhiều biến khác.

Dưới đây là một ví dụ đơn giản về spark-env.shtệp để đặt các biến môi trường Python có liên quan:

#!/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

Trong trường hợp này, nó đặt phiên bản Python được nhân viên / người thực thi sử dụng thành Python3 và phiên bản trình điều khiển của Python thành iPython để có một trình bao đẹp hơn hoạt động.

Nếu bạn chưa có spark-env.shtệp và không cần đặt bất kỳ biến nào khác, biến này sẽ thực hiện những gì bạn muốn, giả sử rằng đường dẫn đến các tệp nhị phân python có liên quan là chính xác (xác minh bằng which). Tôi đã gặp sự cố tương tự và điều này đã khắc phục nó.


Làm thế nào để chạy tệp này?
Volatil 3

Tôi đã phải đổi tên spark-env.sh.template thành spark-env.sh và sau đó thêm vào phần đuôi của tệp xuất PYSPARK_PYTHON = / usr / local / bin / python3 export PYSPARK_DRIVER_PYTHON = / usr / local / bin / python3. Tôi phải tìm ra nơi python3 tôi đã qua mà python3
danivicario

10

Nếu bạn đang chạy Spark trong một tổ chức lớn hơn và không thể cập nhật tệp /spark-env.sh, việc xuất các biến môi trường có thể không hoạt động.

Bạn có thể thêm cài đặt Spark cụ thể thông qua --conftùy chọn khi gửi công việc vào thời gian chạy.

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

Tôi vừa gặp phải vấn đề tương tự và đây là các bước tôi làm theo để cung cấp phiên bản Python. Tôi muốn chạy các công việc PySpark của mình với Python 2.7 thay vì 2.6.

  1. Đi tới thư mục $SPARK_HOMEđang trỏ đến (trong trường hợp của tôi là /home/cloudera/spark-2.1.0-bin-hadoop2.7/)

  2. Dưới thư mục conf, có một tệp được gọi là spark-env.sh. Trong trường hợp bạn có một tệp được gọi là, spark-env.sh.templatebạn sẽ cần sao chép tệp đó vào một tệp mới có tên spark-env.sh.

  3. Chỉnh sửa tệp và viết ba dòng tiếp theo

    xuất PYSPARK_PYTHON = / usr / local / bin / python2.7

    xuất PYSPARK_DRIVER_PYTHON = / usr / local / bin / python2.7

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

  4. Lưu nó và khởi chạy lại ứng dụng của bạn :)

Theo cách đó, nếu bạn tải xuống phiên bản Spark độc lập mới, bạn có thể đặt phiên bản Python mà bạn muốn chạy PySpark.


2
Lưu ý rằng đề xuất là cptệp spark-env.sh.templatemới spark-env.shvà sau đó thay đổi tệp mới chứ không phải thay đổi tên và nội dung của mẫu. Mẫu phải được giữ lại như một tài liệu tham khảo.
et_l

@et_l Bạn nói đúng, tôi chỉ sửa đổi một chút câu trả lời có tính đến nhận xét của bạn, cảm ơn!
selknam

5

Tôi đã gặp thông báo lỗi tương tự và tôi đã thử ba cách được đề cập ở trên. Tôi liệt kê các kết quả như một tài liệu tham khảo bổ sung cho những người khác.

  1. Thay đổi giá trị PYTHON_SPARKPYTHON_DRIVER_SPARKgiá trị trong spark-env.shkhông phù hợp với tôi.
  2. Thay đổi giá trị bên trong tập lệnh python bằng cách sử dụng os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5" os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"không hoạt động đối với tôi.
  3. Thay đổi giá trị trong ~/.bashrctác phẩm giống như một sự quyến rũ ~

nhận xét của bạn là vàng ròng sau khi dành một giờ. Cảm ơn
Cheapcoder

Cảm ơn rât nhiều. Tôi đã thử nghiệm rất nhiều giải pháp. Của bạn làm việc rất tốt.
Muser

3

Tôi đã chạy nó trong IPython (như được mô tả trong liên kết này của Jacek Wasilewski ) và đã nhận được ngoại lệ này; Đã thêm vào PYSPARK_PYTHONtệp hạt nhân IPython và sử dụng sổ ghi chép jupyter để chạy và bắt đầu hoạt động.

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

Tôi gặp vấn đề tương tự trên tia lửa độc lập trong cửa sổ . Phiên bản sửa lỗi của tôi là như thế này: Tôi đã cài đặt các biến môi trường của mình như sau

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

Với cài đặt này, tôi đã thực hiện một Hành động trên pyspark và có ngoại lệ sau:

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.

Để kiểm tra phiên bản python nào mà spark-worker của tôi đang sử dụng, hãy nhấn vào phần sau trong lời nhắc cmd .

python --version
Python 3.6.3

đã cho tôi thấy Python 3.6.3 . Vì vậy, rõ ràng là spark-worker của tôi đang sử dụng hệ thống python v3.6.3.

Bây giờ khi tôi đặt trình điều khiển tia lửa của mình để chạy jupyter bằng cách cài đặt, PYSPARK_DRIVER_PYTHON=jupytervì vậy tôi cần kiểm tra phiên bản python mà jupyter đang sử dụng.

Để làm điều này, hãy mở Anaconda Prompt và nhấn

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

Ở đây có những trăn jupyter đang sử dụng v3.5.x . Bạn cũng có thể kiểm tra phiên bản này trong bất kỳ Notebook nào (Trợ giúp-> Giới thiệu).

Bây giờ tôi cần cập nhật jupyter python lên phiên bản v3.6.6 . Để làm điều đó, hãy mở Anaconda Prompt và nhấn

tìm kiếm conda python

Điều này sẽ cung cấp cho bạn danh sách các phiên bản python có sẵn trong Anaconda. Cài đặt cái mà bạn mong muốn với

conda cài đặt python = 3.6.3

Bây giờ tôi có cả hai bản cài đặt Python của cùng một phiên bản 3.6.3 Spark không nên tuân thủ và nó không tuân theo khi tôi chạy một Hành động trên trình điều khiển Spark. Ngoại lệ không còn nữa. Chúc bạn viết mã vui vẻ ...


1

Trong trường hợp bạn chỉ muốn thay đổi phiên bản python cho tác vụ hiện tại, bạn có thể sử dụng lệnh bắt đầu pyspark sau:

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

1

Vui lòng xem đoạn mã dưới đây:

#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

Vui lòng kiểm tra các mẫu trước khi đăng.
Deepesh Rehi

0

Tôi đang sử dụng môi trường sau

? python --version; ipython --version; jupyter --version
Python 3.5.2+
5.3.0
5.0.0

và các bí danh sau đây hoạt động tốt cho tôi

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"

Trong sổ tay, tôi thiết lập môi trường như sau

from pyspark.context import SparkContext
sc = SparkContext.getOrCreate()

0

lỗi

"Ngoại lệ: Python trong worker có phiên bản 2.6 khác với phiên bản 2.7, PySpark không thể chạy với các phiên bản nhỏ khác nhau". 

Khắc phục (đối với môi trường Cloudera)

  • Chỉnh sửa tệp này: /opt/cloudera/parcels/cdh5.5.4.p0.9/lib/spark/conf/spark-env.sh

  • Thêm những dòng này:

    export PYSPARK_PYTHON=/usr/bin/python
    export PYSPARK_DRIVER_PYTHON=python
    

0

Ran vào điều này ngày hôm nay tại nơi làm việc. Một quản trị viên cho rằng cần thận trọng với mã cứng Python 2.7 như PYSPARK_PYTHONPYSPARK_DRIVER_PYTHONtrong $SPARK_HOME/conf/spark-env.sh. Không cần phải nói điều này đã phá vỡ tất cả các công việc của chúng tôi sử dụng bất kỳ phiên bản hoặc môi trường python nào khác (chiếm> 90% công việc của chúng tôi). @PhillipStich chỉ ra một cách chính xác rằng không phải lúc nào bạn cũng có quyền ghi đối với tệp này, như trường hợp của chúng tôi. Trong khi cài đặt cấu hình trong lệnh spark-submitgọi là một tùy chọn, một lựa chọn khác (khi chạy ở chế độ sợi / cụm) là đặt SPARK_CONF_DIRbiến môi trường trỏ đến tập lệnh cấu hình khác. Ở đó, bạn có thể đặt PYSPARK_PYTHON và bất kỳ tùy chọn nào khác mà bạn có thể cần. Bạn có thể tìm thấy một mẫu trong mã nguồn spark-env.sh trên github .


0

Trong trường hợp của tôi (Ubuntu 18.04), tôi đã chạy mã này trong thiết bị đầu cuối:

sudo vim ~/.bashrc

và sau đó được chỉnh sửa SPARK_HOMEnhư sau:

export SPARK_HOME=/home/muser/programs/anaconda2019/lib/python3.7/site-packages/pyspark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

Bằng cách đó, tôi SPARK_HOMEsẽ tham chiếu đến pysparkgói mà tôi đã cài đặt trong site-package.

Để tìm hiểu cách sử dụng vim, hãy truy cập liên kết này .


0

Chạy:

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

Hàng đầu tiên trong ví dụ này hiển thị liên kết tượng trưng python3. Để đặt nó làm liên kết tượng trưng python mặc định, hãy chạy như sau:

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

sau đó tải lại trình bao của bạn.


0

Tôi đã gặp vấn đề tương tự, chỉ là quên kích hoạt môi trường ảo của mình. Đối với bất kỳ ai ngoài kia cũng có một tâm hồn trống rỗng.


0

Nếu bạn đang làm việc trên mac, hãy sử dụng các lệnh sau

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

Nếu bạn đang sử dụng hệ điều hành khác, hãy kiểm tra liên kết sau: https://github.com/GalvanizeDataScience/spark-install

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.