【问题标题】:How do I set the driver's python version in spark?如何在 spark 中设置驱动程序的 python 版本?
【发布时间】:2015-08-11 15:47:34
【问题描述】:

我使用的是 spark 1.4.0-rc2,所以我可以将 python 3 与 spark 一起使用。如果我将export PYSPARK_PYTHON=python3 添加到我的.bashrc 文件中,我可以与python 3 交互地运行spark。但是,如果我想在本地模式下运行一个独立程序,我会收到一个错误:

异常:worker 中的 Python 与 3.4 版本不同 驱动程序 2.7,PySpark 无法使用不同的次要版本运行

如何指定驱动的python版本?设置export PYSPARK_DRIVER_PYTHON=python3 无效。

【问题讨论】:

    标签: python apache-spark pyspark


    【解决方案1】:

    同时设置 PYSPARK_PYTHON=python3 和 PYSPARK_DRIVER_PYTHON=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/

    【讨论】:

    • spark 2.1 上存在与“IPYTHON=1”选项相关的错误。错误消息是“IPYTHON 和 IPYTHON_OPTS 在 Spark 2.0+ 中被删除。从环境中删除这些并设置 PYSPARK_DRIVER_PYTHON 和 PYSPARK_DRIVER_PYTHON_OPTS。”
    • PYSPARK_PYTHON=python3 设置了工人的 Python 版本,对吧?
    • 如果从 PyCharm 运行,请将 PYSPARK_PYTHON=python3; PYSPARK_DRIVER_PYTHON=ipython3 添加到运行 > 编辑配置 > {your_run_config} > 环境变量。要使这些成为所有运行配置的默认值,请在运行 > 编辑配置 > 模板下更新所需模板的环境变量
    【解决方案2】:

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

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

    【讨论】:

    • @Kevin - 我也有同样的问题,能否请您发布您在 spark-evn.sh 中所做更改的解决方案。
    • 这是将PATH变量引入Spark的正确方法,而不是修改.bashrc。
    • 为什么需要使用 python 3 @Holden?
    • Spark 可以在 python2 中运行,但在这种情况下,用户试图在他们的问题中指定 python3。无论是哪个 Python 版本,都需要始终如一地完成。
    【解决方案3】:

    对我有帮助:

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

    【讨论】:

    • 在将 PYSPARK_DRIVER_PYTHON 设置为与 PYSPARK_PYTHON 相同的值后,这对我有用。
    【解决方案4】:

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

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

    #!/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 文件,并且不需要设置任何其他变量,那么假设相关 python 二进制文件的路径是正确的(使用 @987654326 验证@)。我有一个类似的问题,这解决了它。

    【讨论】:

    • 如何运行这个文件?
    • 我不得不将 spark-env.sh.template 重命名为 spark-env.sh 然后添加到文件的尾部 export PYSPARK_PYTHON=/usr/local/bin/python3 export PYSPARK_DRIVER_PYTHON=/usr /本地/bin/python3.我必须弄清楚我的 python3 在哪里通过哪个 python3
    【解决方案5】:

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

      我刚刚遇到了同样的问题,这些是我为了提供 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. 保存并再次启动您的应用程序:)

      这样,如果你下载了新的 Spark 独立版本,你可以设置你想要运行 PySpark 的 Python 版本。

      【讨论】:

      • 请注意,建议将cp 文件spark-env.sh.template 作为新的spark-env.sh,然后更改新文件,而不是更改模板的名称和内容。该模板应该保留作为参考。
      • @et_l 你说得对,我只是根据你的评论对答案做了一些修改,谢谢!
      【解决方案7】:

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

      1. 更改spark-env.sh 中的PYTHON_SPARK 和PYTHON_DRIVER_SPARK 值对我不起作用。
      2. 使用os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5"更改python脚本中的值 os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5" 不适合我。
      3. 更改~/.bashrc 中的值就像一个魅力~

      【讨论】:

        【解决方案8】:

        我在 IPython 中运行它(如link by Jacek Wasilewski 中所述)并遇到此异常;在IPython内核文件中添加PYSPARK_PYTHON,使用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"
         }
        

        【讨论】:

          【解决方案9】:

          我在 windows 中的 standalone 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 使用的是 v3.6.3 的系统 python。

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

          为此检查打开 Anaconda Prompt 并点击

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

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

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

          conda 搜索 python

          这将为您提供 Anaconda 中可用的 python 版本列表。安装你想要的

          conda install python=3.6.3

          现在我有两个相同版本 3.6.3 Spark 的 Python 安装不符合要求,当我在 Spark-driver 上运行操作时也不符合要求。异常消失了。 快乐编码...

          【讨论】:

            【解决方案10】:

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

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

            【讨论】:

              【解决方案11】:

              请看下面的sn-p:

              #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
              

              【讨论】:

              • 发帖前请检查模板。
              【解决方案12】:

              我有同样的问题,只是忘记激活我的虚拟环境。

              【讨论】:

                【解决方案13】:

                我使用的是以下环境

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

                在notebook中,我设置环境如下

                from pyspark.context import SparkContext
                sc = SparkContext.getOrCreate()
                

                【讨论】:

                  【解决方案14】:

                  错误

                  "异常:worker 中的 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
                    

                  【讨论】:

                    【解决方案15】:

                    今天上班时碰到这个。管理员认为将 Python 2.7 硬编码为 $SPARK_HOME/conf/spark-env.sh 中的 PYSPARK_PYTHON 和 PYSPARK_DRIVER_PYTHON 是谨慎的做法。不用说,这破坏了我们所有使用任何其他 python 版本或环境的工作(这是我们工作的 90% 以上)。 @PhillipStich 正确地指出,您可能并不总是拥有此文件的写权限,就像我们的情况一样。虽然在spark-submit 调用中设置配置是一个选项,但另一种选择(在纱线/集群模式下运行时)是将SPARK_CONF_DIR 环境变量设置为指向另一个配置脚本。在那里你可以设置你的 PYSPARK_PYTHON 和你可能需要的任何其他选项。模板可以在spark-env.sh source code on github中找到。

                    【讨论】:

                      【解决方案16】:

                      就我而言(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 将引用我安装在site-package 中的pyspark 包。

                      要了解如何使用vim,请访问this 链接。

                      【讨论】:

                        【解决方案17】:

                        运行:

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

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

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

                        然后重新加载你的 shell。

                        【讨论】:

                          【解决方案18】:

                          如果你在 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

                          【讨论】:

                            【解决方案19】:

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

                            1. 点击pycharm菜单栏中的运行选项。

                            2. 点击编辑配置选项。

                            3. 单击环境变量并写下以下行 根据您的位置。

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

                            【讨论】:

                              猜你喜欢
                              • 2019-06-04
                              • 1970-01-01
                              • 2021-05-30
                              • 2021-01-08
                              • 1970-01-01
                              • 2023-03-26
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多