मैं स्पार्क में ड्राइवर के पायथन संस्करण को कैसे सेट करूं?


88

मैं स्पार्क 1.4.0-आरसी 2 का उपयोग कर रहा हूं, इसलिए मैं स्पार्क के साथ अजगर 3 का उपयोग कर सकता हूं। अगर मैं export PYSPARK_PYTHON=python3अपनी .bashrc फ़ाइल में जोड़ता हूं, तो मैं स्पार्क इंटरलिंक रूप से अजगर के साथ चला सकता हूं 3. हालांकि, अगर मैं स्थानीय मोड में स्टैंडअलोन प्रोग्राम चलाना चाहता हूं, तो मुझे एक त्रुटि मिलती है:

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

मैं ड्राइवर के लिए अजगर के संस्करण को कैसे निर्दिष्ट कर सकता हूं? सेटिंग export PYSPARK_DRIVER_PYTHON=python3काम नहीं किया।

जवाबों:


34

आपको यह सुनिश्चित करने की ज़रूरत है कि आप जो स्टैंडअलोन प्रोजेक्ट लॉन्च कर रहे हैं, वह पायथन 3 के साथ लॉन्च किया गया है। यदि आप अपने स्टैंडअलोन प्रोग्राम को स्पार्क-सबमिट के माध्यम से सबमिट कर रहे हैं, तो यह ठीक काम करना चाहिए, लेकिन यदि आप इसे अजगर के साथ लॉन्च कर रहे हैं, तो सुनिश्चित करें कि आप शुरू करने के लिए aython3 का उपयोग करते हैं आपका ऐप।

इसके अलावा, सुनिश्चित करें कि आपने अपने env चर सेट कर दिए हैं ./conf/spark-env.sh(यदि यह मौजूद नहीं है तो आप spark-env.sh.templateआधार के रूप में उपयोग कर सकते हैं ।)


3
@ केविन - मुझे वही समस्या हो रही है, क्या आप कृपया अपने समाधान को पोस्ट कर सकते हैं कि आपने स्पार्क- yn.sh में क्या परिवर्तन किया है।
देव पटेल

1
यह संशोधित करने के बजाय, PATH चर को स्पार्क के लिए प्रेरित करने का सही तरीका है .bashrc
C --Z

क्यों अजगर 3 का उपयोग कर रहा है @Holden की आवश्यकता है?
jerzy

स्पार्क python2 में चल सकता है, लेकिन इस मामले में उपयोगकर्ता अपने प्रश्न में python3 को निर्दिष्ट करने का प्रयास कर रहा था। जो भी पायथन संस्करण है, उसे लगातार किया जाना चाहिए।
होल्डन

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
"IPYTHON = 1" विकल्प से संबंधित स्पार्क 2.1 पर एक त्रुटि है। त्रुटि संदेश "IPYTHON और IPYTHON_OPTS स्पार्क 2.0+ में निकाले जाते हैं। इन्हें पर्यावरण से हटा दें और इसके बजाय PYSPARK_DRIVER_PYTHON और PYSPARK_DRIVER_PYTHON_OPTS सेट करें।"
notilas

1
PYSPARK_PYTHON=python3श्रमिकों के पायथन संस्करण को सेट करता है, है ना?
जो

अगर PyCharm से चल रहा है, तो PYSPARK_PYTHON=python3; PYSPARK_DRIVER_PYTHON=ipython3Run> एडिट कॉन्फिगरेशन> {your_run_config}> एनवायरमेंट वेरिएबल्स में जोड़ें। सभी रन कॉन्फ़िगरेशन के लिए इन्हें डिफ़ॉल्ट बनाने के लिए, रन> एडिट कॉन्फ़िगरेशन> टेम्प्लेट्स
मिस्टरएड

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फ़ाइल में उपयुक्त वातावरण चर सेट करके ड्राइवर के लिए पायथन के संस्करण को निर्दिष्ट कर सकते हैं । यदि यह पहले से मौजूद नहीं है, तो आप spark-env.sh.templateप्रदान की गई फ़ाइल का उपयोग कर सकते हैं जिसमें बहुत सारे अन्य चर भी शामिल हैं।

spark-env.shप्रासंगिक पायथन पर्यावरण चर को सेट करने के लिए फ़ाइल का एक सरल उदाहरण यहां दिया गया है :

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

इस मामले में यह पायथन के वर्करों / निष्पादकों द्वारा पाइथन 3 और पाइथन के ड्रायवर वर्जन द्वारा इस्तेमाल किए गए पायथन के संस्करण को नौसिखिया शेल में काम करने के लिए निर्धारित करता है।

यदि आपके पास पहले से कोई spark-env.shफ़ाइल नहीं है, और किसी अन्य चर को सेट करने की आवश्यकता नहीं है, तो यह वही करना चाहिए जो आप चाहते हैं, यह मानते हुए कि संबंधित अजगर बायनेरिज़ के लिए रास्ते सही हैं (साथ सत्यापित करें which)। मुझे इसी तरह की समस्या थी और इसने इसे ठीक कर दिया।


इस फाइल को कैसे चलाएं?
Volatil3

मुझे चिंगारी-env.sh.template का नाम बदलकर spark-env.sh करना पड़ा और फिर फ़ाइल निर्यात PYSPARK_PYTHON = / usr / स्थानीय / बिन / python3 निर्यात YYSPARK_DRIVER_PYTHON = / usr / स्थानीय / बिन / python3 की पूंछ को जोड़ना था। मुझे यह पता लगाना था कि मेरे पाइथन 3 को किस पायथन 3 के माध्यम से जाना है
danivicario

10

यदि आप स्पार्क को किसी बड़े संगठन में चला रहे हैं और /spark-env.sh फ़ाइल को अपडेट करने में असमर्थ हैं, तो वातावरण चर निर्यात करने से काम नहीं हो सकता है।

--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

मुझे बस एक ही मुद्दे का सामना करना पड़ा और ये वे कदम हैं जिनका मैं पायथन संस्करण प्रदान करने के लिए अनुसरण करता हूं। मैं 2.6 के बजाय पायथन 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. फ़ाइल संपादित करें और अगली तीन पंक्तियाँ लिखें

    निर्यात PYSPARK_PYTHON = / usr / स्थानीय / बिन / python2.7

    निर्यात PYSPARK_DRIVER_PYTHON = / usr / स्थानीय / बिन / python2.7

    निर्यात SPARK_YARN_USER_ENV = "PYSPARK_PYTHON = / usr / स्थानीय / बिन / python2.7"

  4. इसे सहेजें और अपना एप्लिकेशन फिर से लॉन्च करें :)

इस तरह, यदि आप एक नया स्पार्क स्टैंडअलोन संस्करण डाउनलोड करते हैं, तो आप पायथन संस्करण को सेट कर सकते हैं जिसे आप PySpon को चलाना चाहते हैं।


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. अजगर स्क्रिप्ट के अंदर मूल्य बदलें os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5" os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"मेरे लिए काम नहीं करता है।
  3. ~/.bashrcएक आकर्षण की तरह काम करता है में मूल्य बदलें ~

आपकी टिप्पणी एक घंटे बिताने के बाद शुद्ध सोना है। धन्यवाद
सस्ते

आपका बहुत बहुत धन्यवाद। मैंने बहुत सारे समाधानों का परीक्षण किया। तुम्हारा बहुत अच्छा काम किया।
मुसर

3

मैं इसे आईपीथॉन में चला रहा था (जैसा कि जेसेक वासिलवेस्की द्वारा इस लिंक में वर्णित है ) और इसे अपवाद मिल रहा था; 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

मुझे विंडोज़ में स्टैंडअलोन स्पार्क पर एक ही मुद्दा मिला । मेरे फिक्स का संस्करण इस प्रकार है: मेरे पास मेरे वातावरण चर को bellow के रूप में स्थापित करना था

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.

यह जानने के लिए कि मेरे स्पार्क-वर्कर ने कौन से अजगर वर्जन का इस्तेमाल किया है, निम्नलिखित cmd प्रॉम्प्ट में हिट कर रहा है ।

python --version
Python 3.6.3

जिसने मुझे पाइथन 3.6.3 दिखाया । तो स्पष्ट रूप से मेरे स्पार्क-कार्यकर्ता सिस्टम अजगर का उपयोग कर रहा है जो v3.6.3 है।

अब जैसा कि मैंने अपने स्पार्क-ड्राइवर को ज्यूपिटर चलाने के लिए सेट किया है, PYSPARK_DRIVER_PYTHON=jupyterइसलिए मुझे उपयोग कर रहे अजगर संस्करण की जांच करने की आवश्यकता है।

इस चेक को करने के लिए एनाकोंडा प्रॉम्प्ट खोलें और हिट करें

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

यहाँ jupyter अजगर v3.5.x का उपयोग कर रहा है । आप इस संस्करण को किसी भी नोटबुक (सहायता-> के बारे में) में भी देख सकते हैं।

अब मुझे jupyter अजगर को संस्करण v3.6.6 में अद्यतन करने की आवश्यकता है । ऐसा करने के लिए एनाकोंडा प्रॉम्प्ट खोलें और हिट करें

कोंडा खोज अजगर

यह आपको एनाकोंडा में उपलब्ध अजगर संस्करणों की एक सूची देगा। अपने इच्छित के साथ स्थापित करें

conda python = 3.6.3 स्थापित करें

अब मेरे पास एक ही संस्करण के दोनों पायथन इंस्टॉलेशन हैं 3.6.3 स्पार्क को अनुपालन नहीं करना चाहिए और जब मैंने स्पार्क-ड्राइवर पर एक्शन चलाया तो यह नहीं हुआ। अपवाद हो गया। हैप्पी कोडिंग ...


1

यदि आप केवल वर्तमान कार्य के लिए अजगर संस्करण बदलना चाहते हैं, तो आप निम्नलिखित pyspark प्रारंभ कमांड का उपयोग कर सकते हैं:

    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

त्रुटि

"अपवाद: कार्यकर्ता में पायथन का संस्करण 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

आज काम में भाग गया। एक व्यवस्थापक ने सोचा कि यह कठिन कोड पायथन 2.7 के रूप में PYSPARK_PYTHONऔर PYSPARK_DRIVER_PYTHONमें विवेकपूर्ण है $SPARK_HOME/conf/spark-env.sh। यह कहने की जरूरत नहीं है कि यह हमारी सभी नौकरियों को तोड़ता है जो किसी भी अन्य अजगर संस्करणों या वातावरण (जो कि हमारी नौकरियों का 90% है) का उपयोग करता है। @PhillipStich सही ढंग से बताता है कि आपके पास हमेशा इस फ़ाइल के लिए लिखने की अनुमति नहीं हो सकती है, जैसा कि हमारा मामला है। spark-submitकॉल में कॉन्फ़िगरेशन सेट करते समय एक विकल्प है, एक अन्य विकल्प (जब यार्न / क्लस्टर मोड में चल रहा है) SPARK_CONF_DIRएक और कॉन्फ़िगरेशन स्क्रिप्ट को इंगित करने के लिए पर्यावरण चर सेट करना है। वहां आप अपना PYSPARK_PYTHON और किसी भी अन्य विकल्प को सेट कर सकते हैं जिनकी आपको आवश्यकता हो सकती है। जीथब पर स्पार्क-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उल्लेख करूंगाpysparksite-package

उपयोग करने का तरीका जानने के लिए vim, इस लिंक पर जाएँ।


0

Daud:

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

इस उदाहरण में पहली पंक्ति python3 सिम्लिंक दिखाती है। डिफ़ॉल्ट अजगर सिमलिंक के रूप में इसे सेट करने के लिए निम्नलिखित चलाएं:

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

फिर अपने शेल को पुनः लोड करें।


0

मेरे पास एक ही समस्या थी, बस अपने आभासी वातावरण को सक्रिय करना भूल गया। बाहर किसी के लिए भी जो एक मानसिक खाली था।


0

यदि आप मैक पर काम कर रहे हैं, तो निम्न कमांड का उपयोग करें

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.