环境变量PYSPARK_PYTHON和PYSPARK_DRIVER_PYTHON

时间:2018-01-15 09:48:31

标签: 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()

在运行最后一行时,我收到错误,其关键行似乎是

[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.

我在.bashrc中有以下变量

export SPARK_HOME=/opt/spark
export PYTHONPATH=$SPARK_HOME/python3

我使用的是Python 3。

10 个答案:

答案 0 :(得分:2)

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

export PYSPARK_PYTHON=/usr/bin/python
export PYSPARK_DRIVER_PYTHON=/usr/bin/python

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

答案 1 :(得分:2)

顺便说一句,如果您使用PyCharm,则可以添加PYSPARK_PYTHONPYSPARK_DRIVER_PYTHON来运行/调试下面每个图像的配置 enter image description here

答案 2 :(得分:1)

我正在使用Jupyter Notebook学习PySpark,这对我很有效。
找到python3在终端中的安装位置:

which python3

这里指向/usr/bin/python3
现在,在笔记本的开头(或.py脚本)中,执行以下操作:

import os

# Set spark environments
os.environ['PYSPARK_PYTHON'] = '/usr/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/usr/bin/python3'

重新启动笔记本会话,它应该可以工作!

答案 3 :(得分:0)

我遇到了同样的问题,并且在.bash_profile中设置了两个变量 导出PYSPARK_PYTHON = / usr / local / bin / python3 导出PYSPARK_DRIVER_PYTHON = / usr / local / bin / python3

但是我的问题仍然存在。

然后我发现问题是我的默认python版本是python,方法是输入python --version

所以我通过以下页面解决了这个问题: How to set Python's default version to 3.x on OS X?

答案 4 :(得分:0)

Archlinux上的Apache-Spark 2.4.3

我刚刚从Apache-Spark website安装了Apache-Spark-2.3.4,正在使用Archlinux distribution,它是一种简单轻便的发行版。因此,我已经安装了apache-spark目录并将其放置在/opt/apache-spark/上,现在该导出我们的环境变量了,记住,我使用的是Archlinux,因此请记住使用{{1} }。

导入环境变量

$JAVA_HOME

测试

echo 'export JAVA_HOME=/usr/lib/jvm/java-7-openjdk/jre' >> /home/user/.bashrc
echo 'export SPARK_HOME=/opt/apache-spark'  >> /home/user/.bashrc
echo 'export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH'  >> /home/user/.bashrc
echo 'export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$PYTHONPATH'  >> /home/user/.bashrc
source ../.bashrc 

一切正常,因为您正确导入了emanuel@hinton ~ $ echo 'export JAVA_HOME=/usr/lib/jvm/java-7-openjdk/jre' >> /home/emanuel/.bashrc emanuel@hinton ~ $ echo 'export SPARK_HOME=/opt/apache-spark' >> /home/emanuel/.bashrc emanuel@hinton ~ $ echo 'export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH' >> /home/emanuel/.bashrc emanuel@hinton ~ $ echo 'export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$PYTHONPATH' >> /home/emanuel/.bashrc emanuel@hinton ~ $ source .bashrc emanuel@hinton ~ $ python Python 3.7.3 (default, Jun 24 2019, 04:54:02) [GCC 9.1.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import pyspark >>> 的环境变量。

通过DockerImage在Archlinux上使用Apache-Spark

出于使用目的,我使用SparkContextpythonjupyter-notebook创建了Docker映像

运行图像

apache-spark-2.3.4

只需转到浏览器并输入

docker run -ti -p 8888:8888 emanuelfontelles/spark-jupyter

并提示身份验证页面,返回终端并复制令牌号,瞧,将使Archlinux容器运行Apache-Spark发行版。

答案 5 :(得分:0)

只需在代码的开头运行以下代码。我正在使用Python3.7。您可能需要运行locate python3.7来获取Python路径。

import os
os.environ["PYSPARK_PYTHON"] = "/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7"
os.environ["PYSPARK_DRIVER_PYTHON"] = "/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7"

答案 6 :(得分:0)

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

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

import os
import sys

os.environ['PYSPARK_PYTHON'] = sys.executable
os.environ['PYSPARK_DRIVER_PYTHON'] = sys.executable

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

答案 7 :(得分:0)

如果您使用的是 Pycharm,请运行 -> 编辑配置并单击环境变量以添加如下(基本上 PYSPARK_PYTHON 和 PYSPARK_DRIVER_PYTHON 应指向相同版本的 Python)。这个解决方案对我有用。感谢上面的帖子。 enter image description here

答案 8 :(得分:0)

为了让人们更容易看到,不必设置特定的路径 /usr/bin/python3,您可以这样做:

我把这一行放在我的 ~/.zshrc 中

export PYSPARK_PYTHON=python3.8
export PYSPARK_DRIVER_PYTHON=python3.8

当我在终端中输入 python3.8 时,Python3.8 开始运行。我想是因为我安装了 pipenv。

另一个可以参考以获取 SPARK_HOME 的好网站是 https://towardsdatascience.com/how-to-use-pyspark-on-your-computer-9c7180075617 (对于权限被拒绝的问题,请使用 sudo mv)

答案 9 :(得分:-1)

我尝试了两种方法来解决这个问题。图片中的方法可以使用。

add environment variables

PYSPARK_PYTHON=/usr/local/bin/python3.7;PYSPARK_DRIVER_PYTHON=/usr/local/bin/python3.7;PYTHONUNBUFFERED=1