环境变量PYSPARK_PYTHON和PYSPARK_DRIVER_PYTHON

Aka*_*mar 7 python python-3.x apache-spark pyspark

我最近安装了pyspark。它已正确安装。当我在python中使用以下简单程序时,出现错误。

>>from pyspark import SparkContext
>>sc = SparkContext()
>>data = range(1,1000)
>>rdd = sc.parallelize(data)
>>rdd.collect()
Run Code Online (Sandbox Code Playgroud)

在运行最后一行时,出现错误,其关键行似乎是

[Stage 0:>                                                          (0 + 0) / 4]18/01/15 14:36:32 ERROR Executor: Exception in task 1.0 in stage 0.0 (TID 1)
org.apache.spark.api.python.PythonException: Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/pyspark/python/lib/pyspark.zip/pyspark/worker.py", line 123, in main
    ("%d.%d" % sys.version_info[:2], version))
Exception: Python in worker has different version 2.7 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.
Run Code Online (Sandbox Code Playgroud)

我在.bashrc中有以下变量

export SPARK_HOME=/opt/spark
export PYTHONPATH=$SPARK_HOME/python3
Run Code Online (Sandbox Code Playgroud)

我正在使用Python 3。

小智 10

如果您在某个环境中工作,也可能会发生这种情况。在这种情况下,可能更难检索到 python 可执行文件的正确路径(无论如何,我认为如果您想与他人共享路径,则对路径进行硬编码并不是一个好主意)。

如果您在脚本/笔记本的开头运行以下几行(至少在创建 SparkSession/SparkContext 之前),问题就解决了:

import os
import sys

os.environ['PYSPARK_PYTHON'] = sys.executable
os.environ['PYSPARK_DRIVER_PYTHON'] = sys.executable
Run Code Online (Sandbox Code Playgroud)

os允许你设置全局变量;packagesys给出了带有 Python 解释器可执行二进制文件的绝对路径的字符串。


bux*_*oum 8

顺便说一句,如果您使用PyCharm,则可以添加PYSPARK_PYTHONPYSPARK_DRIVER_PYTHON运行/调试以下每个图像的配置 在此处输入图片说明

  • 然而,Pycharm 读取 bashrc,这确实是首选的解决方案 (2认同)
  • 如果您使用 pycharm,@cricket_007 的方式是首选方式,因为您希望每个项目都有一个 virtualenv,因此您希望为每个项目设置这些环境变量。您可以在默认部分下为这些环境变量设置默认值。像这样,您不需要在每次运行配置时编辑这些环境变量 (2认同)

Ale*_*lex 7

您应该在中设置以下环境变量$SPARK_HOME/conf/spark-env.sh

export PYSPARK_PYTHON=/usr/bin/python
export PYSPARK_DRIVER_PYTHON=/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

如果spark-env.sh不存在,可以重命名spark-env.sh.template

  • `opt/spark` 中有一个 python 文件夹,但这不是用于 `PYSPARK_PYTHON` 和 `PYSPARK_DRIVER_PYTHON` 的正确文件夹。这两个变量需要指向实际 Python 可执行文件的文件夹。默认位于“/user/bin/python”或“/user/bin/python2.7” (3认同)