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

Kev*_*vin 74 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
Run Code Online (Sandbox Code Playgroud)

如何为驱动程序指定python的版本?设置export PYSPARK_DRIVER_PYTHON=python3不起作用.

fcc*_*lho 71

设置PYSPARK_PYTHON=python3PYSPARK_DRIVER_PYTHON=python3python3都适合我.我在.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"
Run Code Online (Sandbox Code Playgroud)

我也按照本教程使其在Ipython3笔记本中工作:http://ramhiser.com/2015/02/01/configuring-ipython-notebook-support-for-pyspark/

  • 与"IPYTHON = 1"选项相关的spark 2.1出错.错误消息是"在Spark 2.0+中删除了IPYTHON和IPYTHON_OPTS.从环境中删除它们并改为设置PYSPARK_DRIVER_PYTHON和PYSPARK_DRIVER_PYTHON_OPTS". (5认同)
  • `PYSPARK_PYTHON=python3` 设置工人的 Python 版本,对吗? (2认同)

Hol*_*den 28

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

另外,请确保已设置env变量./conf/spark-env.sh(如果它不存在,则可以将其spark-env.sh.template用作基础.)

  • @Kevin - 我遇到了同样的问题,请你发表解决方案,告诉你在spark-evn.sh中做了哪些改变. (3认同)

Nik*_*kiy 23

帮助我的情况:

import os

os.environ["SPARK_HOME"] = "/usr/local/Cellar/apache-spark/1.5.1/"
os.environ["PYSPARK_PYTHON"]="/usr/local/bin/python3"
Run Code Online (Sandbox Code Playgroud)

  • 在将 PYSPARK_DRIVER_PYTHON 设置为与 PYSPARK_PYTHON 相同的值后,这对我有用。 (2认同)

小智 12

您可以通过在./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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它将工作者/执行者使用的Python版本设置为Python3,将Python的驱动程序版本设置为iPython,以便更好地使用shell.

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


dbu*_*osp 8

我刚遇到同样的问题,这些是我为了提供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`,然后更改新文件而不是更改模板的名称和内容.该模板应该作为参考. (2认同)

小智 7

如果您在较大的组织中运行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"
Run Code Online (Sandbox Code Playgroud)


小智 6

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

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