47

我安装了 Spark,运行了 sbt 程序集,并且可以毫无问题地打开 bin/pyspark。但是,我在将 pyspark 模块加载到 ipython 时遇到了问题。我收到以下错误:

In [1]: import pyspark
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-c15ae3402d12> in <module>()
----> 1 import pyspark

/usr/local/spark/python/pyspark/__init__.py in <module>()
     61
     62 from pyspark.conf import SparkConf
---> 63 from pyspark.context import SparkContext
     64 from pyspark.sql import SQLContext
     65 from pyspark.rdd import RDD

/usr/local/spark/python/pyspark/context.py in <module>()
     28 from pyspark.conf import SparkConf
     29 from pyspark.files import SparkFiles
---> 30 from pyspark.java_gateway import launch_gateway
     31 from pyspark.serializers import PickleSerializer, BatchedSerializer, UTF8Deserializer, \
     32     PairDeserializer, CompressedSerializer

/usr/local/spark/python/pyspark/java_gateway.py in <module>()
     24 from subprocess import Popen, PIPE
     25 from threading import Thread
---> 26 from py4j.java_gateway import java_import, JavaGateway, GatewayClient
     27
     28

ImportError: No module named py4j.java_gateway
4

6 回答 6

74

在我的环境中(使用 docker 和图像 sequenceiq/spark:1.1.0-ubuntu),我遇到了这个问题。如果您查看 pyspark shell 脚本,您会发现需要在 PYTHONPATH 中添加一些内容:

export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH

这对我来说在 ipython 中有效。

更新:如评论中所述,py4j zip 文件的名称随每个 Spark 版本而变化,因此请四处寻找正确的名称。

于 2014-12-09T05:21:14.580 回答
30

我通过在 .bashrc 中添加一些路径解决了这个问题

export SPARK_HOME=/home/a141890/apps/spark
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH

在此之后,它永远不会引发 ImportError: No module named py4j.java_gateway。

于 2015-01-16T03:35:53.983 回答
8

安装 pip 模块“py4j”。

pip install py4j

我在 Spark 2.1.1 和 Python 2.7.x 中遇到了这个问题。不确定 Spark 是否停止在最新发行版中捆绑此包。但是安装py4j模块为我解决了这个问题。

于 2017-06-14T09:08:05.350 回答
4

在 Pycharm 中,在运行上述脚本之前,请确保您已经解压缩了 py4j*.zip 文件。并将其引用添加到脚本 sys.path.append("path to spark*/python/lib")

它对我有用。

于 2016-07-28T10:31:35.780 回答
3
#/home/shubham/spark-1.6.2
import os
import sys
# Set the path for spark installation
# this is the path where you have built spark using sbt/sbt assembly
os.environ['SPARK_HOME'] = "/home/shubham/spark-1.6.2"
# os.environ['SPARK_HOME'] = "/home/jie/d2/spark-0.9.1"
# Append to PYTHONPATH so that pyspark could be found
sys.path.append("/home/shubham/spark-1.6.2/python")
sys.path.append("/home/shubham/spark-1.6.2/python/lib")
# sys.path.append("/home/jie/d2/spark-0.9.1/python")
# Now we are ready to import Spark Modules
try:
    from pyspark import SparkContext
    from pyspark import SparkConf`enter code here`
    print "Hey nice"
except ImportError as e:
    print ("Error importing Spark Modules", e)
sys.exit(1)
于 2016-07-28T10:44:12.843 回答
1

要使用 python 3.8 设置 PySpark,请将以下路径添加到 bash 配置文件(Mac):

export SPARK_HOME=/Users/<username>/spark-3.0.1-bin-hadoop2.7
export PATH=$PATH:/Users/<username>/spark-3.0.1-bin-hadoop2.7/bin
export PYSPARK_PYTHON=python3
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.9-src.zip:$PYTHONPATH

注意:使用下载的 spark 包中的 py4j 路径。

保存新更新的 bash 文件:Ctrl + X。

运行新的 bash 文件:source ~/.bash_profile

于 2020-12-26T19:55:27.790 回答