这是另一个论坛上其他人的问题的副本,从未得到回答,所以我想我会在这里重新提问,因为我有同样的问题。 (见 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 程序?
假设以下之一:
Spark 已下载到您的系统上,并且您有一个环境变量 SPARK_HOME 指向它
你已经运行了 pip install pyspark
这是一个简单的方法(如果你不关心它是如何工作的!!!)
使用 findspark
转到你的 python shell pip install findspark import findspark findspark.init() 从 pyspark 导入必要的模块 import SparkContext from pyspark import SparkConf 完成!!!
如果它打印这样的错误:
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
原来 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
,去图。您的文件夹名称可能会有所不同。
通过导出 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 目录,知道吗?
libexec/python/build
目录的用途,但 spark 1.6.2 没有
不要将您的 py 文件运行为:python filename.py
,而是使用:spark-submit filename.py
来源:https://spark.apache.org/docs/latest/submitting-applications.html
import pyspark
将在命令行或执行的脚本中失败。你必须要么。按预期通过 spark-submit 运行 pyspark 或 b.将 $SPARK_HOME/python 添加到 $PYTHONPATH。
在 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 版本。
对于 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())
要摆脱 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)
在 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 的文件夹)
对于 Linux 用户,以下是将 pyspark libaray 包含在 PYTHONPATH 中的正确(非硬编码)方式。两个 PATH 部分都是必需的:
pyspark Python 模块本身的路径,以及 pyspark 模块在导入时所依赖的压缩库的路径
请注意下面的压缩库版本是动态确定的,因此我们不会对其进行硬编码。
export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.zip):${PYTHONPATH}
我在 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
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 上的独立包使用,但我尚未对其进行测试。
您可以使用 pip
在 python 中获取 pyspark path
(如果您使用 PIP 安装了 pyspark),如下所示
pip show pyspark
我收到此错误是因为我尝试提交的 python 脚本名为 pyspark.py (facepalm)。修复方法是按照上面的建议设置我的 PYTHONPATH,然后将脚本重命名为 pyspark_test.py 并清理基于我的脚本原始名称创建的 pyspark.pyc 并清除此错误。
在 DSE (DataStax Cassandra & Spark) 的情况下,需要将以下位置添加到 PYTHONPATH
export PYTHONPATH=/usr/share/dse/resources/spark/python:$PYTHONPATH
然后使用 dse pyspark 获取路径中的模块。
dse pyspark
我遇到了同样的问题,并且会在上面提出的解决方案中添加一件事。在 Mac OS X 上使用 Homebrew 安装 Spark 时,您需要更正 py4j 路径地址以在路径中包含 libexec(记住将 py4j 版本更改为您拥有的版本);
PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.zip:$PYTHONPATH
py4j
文件夹,但没有用。使用压缩文件...
我有同样的问题。
还要确保您使用的是正确的 python 版本,并且您正在使用正确的 pip 版本安装它。就我而言:我同时拥有 python 2.7 和 3.x。我已经安装了 pyspark
pip2.7 安装 pyspark
它奏效了。
在我的情况下,它安装在不同的 python dist_package(python 3.5),而我使用的是 python 3.6,所以下面的帮助:
python -m pip install pyspark
您还可以创建一个 Docker 容器,将 Alpine 作为操作系统,并将 Python 和 Pyspark 作为包安装。这将把它全部容器化。
!pip install pyspark
在 Jupyter 笔记本或谷歌 colab 中。不要忘记执行 colab 笔记本顶部列出的 Restart Runtime
不定期副业成功案例分享