如何在spark中设置驱动程序的python版本?

时间:2015-05-28 22:52:08

标签: apache-spark pyspark

我使用spark 1.4.0-rc2所以我可以使用python 3和spark。如果我将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无效。

19 个答案:

答案 0 :(得分:60)

PYSPARK_PYTHON=python3PYSPARK_DRIVER_PYTHON=python3设置为python3对我有用。我在.bashrc中使用export进行了此操作。最后,这些是我创建的变量:

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/

答案 1 :(得分:26)

您需要确保使用Python 3启动您启动的独立项目。如果您通过spark-submit提交您的独立程序,那么它应该可以正常工作,但如果您使用python启动它,请确保你使用python3来启动你的应用程序。

此外,请确保您已在./conf/spark-env.sh中设置了env变量(如果它不存在,您可以使用spark-env.sh.template作为基础。)

答案 2 :(得分:19)

帮助我:

import os

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

答案 3 :(得分:10)

您可以通过在./conf/spark-env.sh文件中设置适当的环境变量来为驱动程序指定Python的版本。如果它不存在,您可以使用提供的spark-env.sh.template文件,其中还包含许多其他变量。

以下是设置相关Python环境变量的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

在这种情况下,它将worker / executors使用的Python版本设置为Python3,将Python的驱动程序版本设置为iPython,以便更好地使用shell。

如果您还没有spark-env.sh个文件,并且不需要设置任何其他变量,那么这个变量应该可以做到你想要的,假设相关python二进制文件的路径是正确(与which核实)。我有一个类似的问题,这解决了它。

答案 4 :(得分:6)

我刚刚遇到了同样的问题,这些是我为了提供Python版本而遵循的步骤。我想用Python 2.7而不是2.6来运行我的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 / local / bin / python2.7

         

    导出PYSPARK_DRIVER_PYTHON = / usr / local / bin / python2.7

         

    导出SPARK_YARN_USER_ENV =" PYSPARK_PYTHON = / usr / local / bin / python2.7"

  4. 保存并再次启动您的应用程序:)

  5. 这样,如果您下载新的Spark独立版本,则可以设置要运行PySpark的Python版本。

答案 5 :(得分:4)

如果您在较大的组织中运行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"

答案 6 :(得分:2)

我在IPython中运行它(如此link by Jacek Wasilewski中所述)并且正在获得此异常;将PYSPARK_PYTHON添加到IPython内核文件并使用jupyter notebook运行,并开始工作。

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

答案 7 :(得分:1)

我遇到了同样的错误消息,我尝试了上面提到的三种方法。我将结果列为对其他人的补充参考。

  1. 更改PYTHON_SPARK中的PYTHON_DRIVER_SPARKspark-env.sh值对我来说无效。
  2. 使用os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5"更改python脚本中的值 os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"对我不起作用。
  3. 更改~/.bashrc中的值,就像魅力〜
  4. 一样

答案 8 :(得分: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

答案 9 :(得分:0)

错误

  

“异常:worker中的Python与驱动程序中的Python版本不同   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
    

答案 10 :(得分: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()

答案 11 :(得分:0)

如果您只想更改当前任务的python版本,可以使用以下pyspark start命令:

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

答案 12 :(得分:0)

今天在工作中遇到这个问题。管理员认为将Python 2.7硬编码为PYSPARK_PYTHON中的PYSPARK_DRIVER_PYTHON$SPARK_HOME/conf/spark-env.sh是明智的。不用说,这破坏了我们利用其他任何python版本或环境的工作(占我们工作的90%以上)。 @PhillipStich正确指出您可能并不总是对此文件具有写权限,就像我们的情况一样。虽然可以在spark-submit调用中设置配置,但是另一种选择(当以yarn / cluster模式运行时)是将SPARK_CONF_DIR环境变量设置为指向另一个配置脚本。在那里,您可以设置PYSPARK_PYTHON以及您可能需要的任何其他选项。可以在spark-env.sh source code on github中找到一个模板。

答案 13 :(得分:0)

我在 windows 独立Spark 上遇到了同样的问题。 我的修复版本如下: 我将环境变量设置为波纹管

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.

要检查我的 spark-worker 使用的是哪个python版本,请在 cmd 提示符下单击以下命令。

python --version
Python 3.6.3

向我展示了 Python 3.6.3 。所以很明显,我的 spark-worker 使用的系统Python是v3.6.3。

现在,通过设置PYSPARK_DRIVER_PYTHON=jupyter spark-driver 设置为运行jupyter,因此我需要检查jupyter使用的python版本。

为此,请打开 Anaconda提示并点击

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

这里的jupyter python使用的是 v3.5.x 。您也可以在任何笔记本中查看此版本(帮助->关于)。

现在,我需要将jupyter python更新到版本 v3.6.6 。为此,请打开 Anaconda提示并点击

  

conda搜索python

这将为您提供Anaconda中可用的python版本的列表。用

安装所需的
  

conda安装python = 3.6.3

现在,我已经安装了两个版本3.6.3相同的Python,但我在Spark驱动程序上运行Action时却不这样做。异常消失了。 编码愉快...

答案 14 :(得分: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,请转到this链接。

答案 15 :(得分:0)

运行:

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

此示例的第一行显示python3符号链接。要将其设置为默认的python符号链接,请运行以下命令:

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

然后重新加载外壳程序。

答案 16 :(得分:0)

我遇到了同样的问题,只是忘记激活我的虚拟环境。对于外面也有精神空白的任何人。

答案 17 :(得分: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

答案 18 :(得分:0)

我在使用 pycharm 和 spark 时遇到了同样的问题。 要修复此错误,我已按照以下步骤进行修复。

(1) Click on Run option in pycharm menu bar. 
(2) Click on Edit Configurations option. 
(3) Click on Environment Variables and write down given below lines 
    as per your location.

PYSPARK_PYTHON=/usr/bin/python3.6;
PYSPARK_DRIVER_PYTHON=/usr/bin/python3.6;
SPARK_HOME=/home/xxxxxx/Desktop/xxxx/spark

它对我有用,所以你也可以试试。

谢谢:)