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

我正在使用spark 1.4.0-rc2,所以我可以使用python 3与火花。 如果我将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不起作用。

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

还要确保你已经在./conf/spark-env.sh设置了你的envvariables(如果它不存在,你可以使用spark-env.sh.template作为基础。

PYSPARK_PYTHON=python3PYSPARK_DRIVER_PYTHON=python3都设置为python3适用于我。 我在.bashrc中使用了导出。 最后,这些是我创build的variables:

 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/

在我的情况帮助:

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

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

下面是一个spark-env.sh文件的简单例子,用于设置相关的Python环境variables:

 #!/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文件,并且不需要设置任何其他variables,那么这个应该做你想做的,假设到相关的python二进制文件的path是正确的(用whichvalidation)。 我有一个类似的问题,这固定它。

我在IPython中运行它(正如Jacek Wasilewski在这个链接中所描述的那样),并且得到了这个exception。 添加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" } 

我正在使用以下环境

 ? 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() 

错误

“例外:工作者中的Python与驱动程序2.7中的版本不同,PySpark不能使用不同的次版本运行”。

固定

  • 编辑这个文件: /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 

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

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

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

  1. 更改PYTHON_SPARKPYTHON_DRIVER_SPARK值对我不起作用。
  2. 使用os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5" os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"对python脚本中的值不起作用。
  3. 改变~/.bashrc的值就像一个魅力〜