126

这是另一个论坛上其他人的问题的副本,从未得到回答,所以我想我会在这里重新提问,因为我有同样的问题。(见http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736

我已经在我的机器上正确安装了 Spark,并且在使用 ./bin/pyspark 作为我的 python 解释器时,能够使用 pyspark 模块运行 python 程序而不会出错。

但是,当我尝试运行常规 Python shell 时,当我尝试导入 pyspark 模块时,我收到此错误:

from pyspark import SparkContext

它说

"No module named pyspark".

我怎样才能解决这个问题?是否需要设置一个环境变量以将 Python 指向 pyspark 头文件/库/等?如果我的 spark 安装是 /spark/,我需要包含哪些 pyspark 路径?还是只能从 pyspark 解释器运行 pyspark 程序?

4

20 回答 20

113

假设以下之一:

  • Spark 已下载到您的系统上,并且您有一个SPARK_HOME指向它的环境变量
  • 你跑了pip install pyspark

这是一个简单的方法(如果你不关心它是如何工作的!!!)

使用findspark

  1. 转到你的 python shell

    pip install findspark
    
    import findspark
    findspark.init()
    
  2. 导入必要的模块

    from pyspark import SparkContext
    from pyspark import SparkConf
    
  3. 完毕!!!

于 2016-01-13T09:47:04.993 回答
54

如果它打印这样的错误:

ImportError:没有名为 py4j.java_gateway 的模块

请将 $SPARK_HOME/python/build 添加到 PYTHONPATH:

export SPARK_HOME=/Users/pzhang/apps/spark-1.1.0-bin-hadoop2.4
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH
于 2014-12-05T09:23:01.217 回答
51

原来 pyspark bin 正在加载 python 并自动加载正确的库路径。签出$SPARK_HOME/bin/pyspark

export SPARK_HOME=/some/path/to/apache-spark
# Add the PySpark classes to the Python path:
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH

我将此行添加到我的 .bashrc 文件中,现在可以正确找到模块!

于 2014-05-09T14:51:24.183 回答
23

通过导出 SPARK 路径和 Py4j 路径,它开始工作:

export SPARK_HOME=/usr/local/Cellar/apache-spark/1.5.1
export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH
PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH 
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH

因此,如果您不想在每次启动 Python shell 时都输入这些内容,则可能需要将其添加到.bashrc文件中

于 2015-11-04T04:22:35.457 回答
23

不要将您的 py 文件运行为:python filename.py 而是使用:spark-submit filename.py

来源:https ://spark.apache.org/docs/latest/submitting-applications.html

于 2015-10-22T04:33:55.313 回答
18

在 Mac 上,我使用 Homebrew 安装 Spark(公式“apache-spark”)。然后,我以这种方式设置 PYTHONPATH,以便 Python 导入工作:

export SPARK_HOME=/usr/local/Cellar/apache-spark/1.2.0
export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH

将“1.2.0”替换为 Mac 上实际的 apache-spark 版本。

于 2015-02-03T17:29:03.093 回答
16

对于 pyspark 中的 Spark 执行,需要两个组件一起工作:

  • pyspark蟒蛇包
  • JVM 中的 Spark 实例

当使用 spark-submit 或 pyspark 启动东西时,这些脚本会同时处理这两个问题,即它们设置您的 PYTHONPATH、PATH 等,以便您的脚本可以找到 pyspark,并且它们还会启动 spark 实例,根据您的参数进行配置,例如 --master X

或者,可以绕过这些脚本并直接在 python 解释器中运行您的 spark 应用程序,例如python myscript.py. 当 spark 脚本开始变得更加复杂并最终接收到自己的 args 时,这一点尤其有趣。

  1. 确保 Python 解释器可以找到 pyspark 包。如前所述,要么将 spark/python 目录添加到 PYTHONPATH,要么使用 pip install 直接安装 pyspark。
  2. 从您的脚本中设置 spark 实例的参数(那些曾经传递给 pyspark 的参数)。
    • 对于您通常使用 --conf 设置的 spark 配置,它们是使用 SparkSession.builder.config 中的配置对象(或字符串配置)定义的
    • 对于主要选项(如 --master 或 --driver-mem),您可以通过写入 PYSPARK_SUBMIT_ARGS 环境变量来设置它们。为了让事情变得更干净、更安全,您可以在 Python 本身中设置它,并且 spark 会在启动时读取它。
  3. 启动实例,它只需要您getOrCreate()从构建器对象调用。

因此,您的脚本可以具有以下内容:

from pyspark.sql import SparkSession

if __name__ == "__main__":
    if spark_main_opts:
        # Set main options, e.g. "--master local[4]"
        os.environ['PYSPARK_SUBMIT_ARGS'] = spark_main_opts + " pyspark-shell"

    # Set spark config
    spark = (SparkSession.builder
             .config("spark.checkpoint.compress", True)
             .config("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11")
             .getOrCreate())
于 2017-12-19T23:45:37.153 回答
12

要摆脱ImportError: No module named py4j.java_gateway,您需要添加以下行:

import os
import sys


os.environ['SPARK_HOME'] = "D:\python\spark-1.4.1-bin-hadoop2.4"


sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python")
sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python\lib\py4j-0.8.2.1-src.zip")

try:
    from pyspark import SparkContext
    from pyspark import SparkConf

    print ("success")

except ImportError as e:
    print ("error importing spark modules", e)
    sys.exit(1)
于 2016-09-11T23:23:10.733 回答
8

在 Windows 10 上,以下内容对我有用。我使用Settings > Edit environment variables 为您的帐户添加了以下环境变量:

SPARK_HOME=C:\Programming\spark-2.0.1-bin-hadoop2.7
PYTHONPATH=%SPARK_HOME%\python;%PYTHONPATH%

(将“C:\Programming\...”更改为您安装 spark 的文件夹)

于 2016-11-08T13:41:25.463 回答
5

我在 CentOS VM 上运行一个 spark 集群,它是从 cloudera yum 包安装的。

必须设置以下变量才能运行 pyspark。

export SPARK_HOME=/usr/lib/spark;
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH
于 2017-04-24T08:49:23.513 回答
5

对于 Linux 用户,以下是将 pyspark libaray 包含在 PYTHONPATH 中的正确(非硬编码)方式。两个 PATH 部分都是必需的:

  1. pyspark Python 模块本身的路径,以及
  2. pyspark 模块在导入时依赖的压缩库的路径

请注意下面的压缩库版本是动态确定的,因此我们不会对其进行硬编码。

export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.zip):${PYTHONPATH}
于 2017-03-30T21:51:52.960 回答
4

您可以使用(如果您已使用 PIP 安装 pyspark)获取pyspark pathin python ,如下所示pip

pip show pyspark
于 2019-07-19T08:34:43.450 回答
4
export PYSPARK_PYTHON=/home/user/anaconda3/bin/python
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook'

这就是我将 Anaconda 发行版与 Spark 一起使用时所做的。这是独立于 Spark 版本的。您可以将第一行更改为用户的 python bin。此外,从 Spark 2.2.0 开始,PySpark 可作为 PyPi 上的独立包使用,但我尚未对其进行测试。

于 2017-08-02T12:11:52.663 回答
2

在我的情况下,它安装在不同的 python dist_package(python 3.5),而我使用的是 python 3.6,所以下面的帮助:

python -m pip install pyspark
于 2019-06-14T03:29:26.583 回答
2

我遇到了同样的问题,并且会在上面提出的解决方案中添加一件事。在 Mac OS X 上使用 Homebrew 安装 Spark 时,您需要更正 py4j 路径地址以在路径中包含 libexec(记住将 py4j 版本更改为您拥有的版本);

PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.zip:$PYTHONPATH
于 2016-06-05T16:11:24.597 回答
2

我收到此错误是因为我尝试提交的 python 脚本名为 pyspark.py ( facepalm )。修复方法是按照上面的建议设置我的 PYTHONPATH,然后将脚本重命名为 pyspark_test.py 并清理基于我的脚本原始名称创建的 pyspark.pyc 并清除此错误。

于 2016-02-09T14:42:20.373 回答
2

在 DSE (DataStax Cassandra & Spark) 的情况下,需要将以下位置添加到 PYTHONPATH

export PYTHONPATH=/usr/share/dse/resources/spark/python:$PYTHONPATH

然后使用 dse pyspark 获取路径中的模块。

dse pyspark
于 2016-05-11T15:05:13.473 回答
2

我有同样的问题。

还要确保您使用的是正确的 python 版本,并且您正在使用正确的 pip 版本安装它。就我而言:我同时拥有 python 2.7 和 3.x。我已经安装了 pyspark

pip2.7 安装 pyspark

它奏效了。

于 2017-12-09T11:04:35.097 回答
1

您还可以创建一个 Docker 容器,将 Alpine 作为操作系统,并将 Python 和 Pyspark 作为包安装。这将把它全部容器化。

于 2018-11-09T10:16:23.910 回答
0
!pip install pyspark

在 Jupyter 笔记本或谷歌 colab 中。不要忘记Restart Runtime在 colab 笔记本顶部列出

于 2021-10-12T13:56:10.417 回答