如何在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=python3
和PYSPARK_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是正确的(用which
validation)。 我有一个类似的问题,这固定它。
我在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 ..
我遇到了同样的错误信息,我已经尝试了上面提到的三种方法。 我将结果列为对其他人的补充参考。
- 更改
PYTHON_SPARK
和PYTHON_DRIVER_SPARK
值对我不起作用。 - 使用
os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5"
os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"
对python脚本中的值不起作用。 - 改变
~/.bashrc
的值就像一个魅力〜