ChatGPT解决这个技术问题 Extra ChatGPT

在 python shell 中导入 pyspark

这是另一个论坛上其他人的问题的副本,从未得到回答,所以我想我会在这里重新提问,因为我有同样的问题。 (见 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 程序?

他们说更改环境变量“不是超级有效,因为它很快被 bin/spark-submit 覆盖”。 Maybe you can learn something from this exchange

O
OneCricketeer

假设以下之一:

Spark 已下载到您的系统上,并且您有一个环境变量 SPARK_HOME 指向它

你已经运行了 pip install pyspark

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

使用 findspark

转到你的 python shell pip install findspark import findspark findspark.init() 从 pyspark 导入必要的模块 import SparkContext from pyspark import SparkConf 完成!!!


其他解决方案对我不起作用。我现在在我的程序中使用 findspark。似乎是解决该问题的一个不错的解决方法。
我宁愿不需要这样做..但是嘿..鉴于没有其他工作..我会接受的。
P
Peng Zhang 1516540

如果它打印这样的错误:

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

如另一个响应 stackoverflow.com/questions/26533169/… 中所述,我必须添加以下 export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH
O
OneCricketeer

原来 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 文件中,现在可以正确找到模块!


除了这一步,我还需要添加:export SPARK_HOME=~/dev/spark-1.1.0,去图。您的文件夹名称可能会有所不同。
O
OneCricketeer

通过导出 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 文件中


我在我的 Apache Spark 安装中找不到 libexec 目录,知道吗?
@AlbertoBonsanto 对不起。我没有遇到过这个问题。所以,不知道:(
是的,他们在 spark 1.5.2 中取出了 libexec 文件夹
@bluerubez 似乎存在于 spark 1.6.2 中......另外,不确定 libexec/python/build 目录的用途,但 spark 1.6.2 没有
O
OneCricketeer

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

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


有人可以扩展为什么不这样做?我一直在研究这个问题,但到目前为止还没有找到任何可以解释为什么会这样的问题。
@Mint 其他答案说明了原因;默认情况下,pyspark 包不包含在 $PYTHONPATH 中,因此 import pyspark 将在命令行或执行的脚本中失败。你必须要么。按预期通过 spark-submit 运行 pyspark 或 b.将 $SPARK_HOME/python 添加到 $PYTHONPATH。
还有一点是spark-submit是一个shell脚本,它可以帮助你在使用spark之前正确配置系统环境,如果你只是做python main.py你需要正确配置系统环境eg PYTHONPATH, SPARK_HOME
j
jyu

在 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 版本。


F
F Pereira

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

pyspark python 包

JVM 中的 Spark 实例

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

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

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

e
edwinksl

要摆脱 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)

J
JustAC0der

在 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 的文件夹)


N
NYCeyes

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

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

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

export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.zip):${PYTHONPATH}

s
sujesh chirackkal

我在 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

Y
Yayati Sule
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 上的独立包使用,但我尚未对其进行测试。


S
Salman Zafar

您可以使用 pip 在 python 中获取 pyspark path(如果您使用 PIP 安装了 pyspark),如下所示

pip show pyspark

P
Patrick

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


S
Sreesankar

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

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

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

dse pyspark

t
tjb305

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

PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.zip:$PYTHONPATH

注意 - 我尝试解压缩它并仅使用 py4j 文件夹,但没有用。使用压缩文件...
e
etinika

我有同样的问题。

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

pip2.7 安装 pyspark

它奏效了。


D
D Untouchable

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

python -m pip install pyspark

E
Eddy

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


T
Talha Tayyab
!pip install pyspark

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