我最近安装了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。
答案 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)
答案 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)
我刚刚从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
>>>
的环境变量。
出于使用目的,我使用SparkContext
,python
和jupyter-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)。这个解决方案对我有用。感谢上面的帖子。
答案 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)
我尝试了两种方法来解决这个问题。图片中的方法可以使用。
PYSPARK_PYTHON=/usr/local/bin/python3.7;PYSPARK_DRIVER_PYTHON=/usr/local/bin/python3.7;PYTHONUNBUFFERED=1