Apache spark 如何设置驱动程序';spark中的python版本是什么?

Apache spark 如何设置驱动程序';spark中的python版本是什么?,apache-spark,pyspark,Apache Spark,Pyspark,我正在使用spark 1.4.0-rc2,因此我可以将python 3与spark一起使用。如果我将export PYSPARK\u PYTHON=python3添加到我的.bashrc文件中,我可以与python3交互运行spark。但是,如果我想在本地模式下运行独立程序,我会得到一个错误: Exception: Python in worker has different version 3.4 than that in driver 2.7, PySpark cannot run with

我正在使用spark 1.4.0-rc2,因此我可以将python 3与spark一起使用。如果我将
export PYSPARK\u PYTHON=python3
添加到我的.bashrc文件中,我可以与python3交互运行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\u DRIVER\u PYTHON=python3
无效。

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


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

您可以通过在
/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
在本例中,它将工作者/执行者使用的Python版本设置为Python3,将Python的驱动程序版本设置为iPython,以便更好地使用shell


如果您还没有
spark env.sh
文件,并且不需要设置任何其他变量,那么假设相关python二进制文件的路径正确(请使用
验证哪个
)。我有一个类似的问题,这就解决了。

设置
PYSPARK\u PYTHON=python3
PYSPARK\u DRIVER\u PYTHON=python3
这两种设置对我都适用。我在我的.bashrc中使用了导出。最后,我创建了以下变量:

export SPARK_HOME=“$HOME/Downloads/SPARK-1.4.0-bin-hadoop2.4”
导出IPYTHON=1
导出PYSPARK_PYTHON=/usr/bin/python3
导出PYSPARK\u驱动程序\u PYTHON=ipython3
导出PYSPARK\u驱动程序\u PYTHON\u OPTS=“笔记本”
我还遵循本教程,使其在Ipython3笔记本中工作:

对我的情况有帮助:

导入操作系统
os.environ[“SPARK_HOME”]=“/usr/local/ceral/apache SPARK/1.5.1/”
os.environ[“PYSPARK_PYTHON”]=“/usr/local/bin/python3”

我在IPython中运行它(如本文所述),并且得到了这个异常;将
PYSPARK\u 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"
 }
错误 异常:worker中的Python与驱动程序中的Python版本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
    

我正在使用以下环境

? 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版本,可以使用以下pyspark start命令:

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

我遇到了相同的错误消息,我尝试了上述三种方法。我把结果列出来作为对其他人的补充参考

  • 更改
    SPARK env.sh
    中的
    PYTHON\u SPARK
    PYTHON\u DRIVER\u SPARK
    值对我不起作用
  • 使用
    os.environ[“PYSPARK\u python”]=“usr/bin/python3.5”
    os.environ[“PYSPARK\u DRIVER\u PYTHON”]=“usr/bin/python3.5”
    对我不起作用
  • 更改
    ~/.bashrc
    中的值就像一个符咒~

  • 我刚刚遇到了同样的问题,为了提供Python版本,我遵循以下步骤。我想用Python2.7而不是2.6运行我的PySpark作业

  • 转到
    $SPARK\u HOME
    指向的文件夹(在我的例子中是
    /HOME/cloudera/SPARK-2.1.0-bin-hadoop2.7/

  • 在文件夹
    conf
    下,有一个名为
    spark env.sh
    的文件如果您有一个名为
    spark env.sh.template
    的文件,则需要将该文件复制到名为
    spark env.sh
    的新文件中

  • 编辑文件并写下接下来的三行

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

    导出PYSPARK_驱动程序_PYTHON=/usr/local/bin/python2.7

    导出SPARK\u纱线\u用户\u ENV=“PYSPARK\u PYTHON=/usr/local/bin/python2.7”

  • 保存并再次启动应用程序:)


  • 通过这种方式,如果下载新的Spark单机版,可以设置要运行PySpark的Python版本。

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

    今天上班的时候碰到这个。管理员认为在
    $SPARK\u HOME/conf/SPARK env.sh
    中将Python2.7硬编码为
    PYSPARK\u Python
    PYSPARK\u驱动程序\u Python
    。不用说,这破坏了我们利用任何其他python版本或环境的所有工作(占我们工作的90%以上)@PhillipStich正确地指出,您可能并不总是拥有此文件的写入权限,就像我们的情况一样。当在
    spark submit
    调用中设置配置是一个选项时,另一种选择(在纱线/簇模式下运行时)是将
    spark\u CONF\u DIR
    环境变量设置为指向另一个配置脚本。在那里,您可以设置PYSPARK_PYTHON和您可能需要的任何其他选项。可以在中找到模板。

    我在上得到了相同的问题
    PYSPARK_SUBMIT_ARGS="pyspark-shell"
    PYSPARK_DRIVER_PYTHON=jupyter
    PYSPARK_DRIVER_PYTHON_OPTS='notebook' 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.
    
    python --version
    Python 3.6.3
    
    python --version
    Python 3.5.X :: Anaconda, Inc.
    
    #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
    
    sudo vim ~/.bashrc
    
    export SPARK_HOME=/home/muser/programs/anaconda2019/lib/python3.7/site-packages/pyspark
    export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
    
    ls -l /usr/local/bin/python*
    
    ln -s -f /usr/local/bin/python3 /usr/local/bin/python
    
    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
    
    (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