为什么PySpark找不到py4j.java_gateway?

47 投票
6 回答
73708 浏览
提问于 2025-04-29 07:13

我安装了Spark,运行了sbt assembly,并且可以顺利打开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
暂无标签

6 个回答

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)

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

4

在Pycharm中,

在运行上面的脚本之前,确保你已经解压了py4j*.zip文件。

然后在脚本中添加它的引用,像这样:sys.path.append("spark*/python/lib的路径")

这样做对我有效。

9

安装 pip 模块 'py4j'。

pip install py4j

我在使用 Spark 2.1.1 和 Python 2.7.x 时遇到了这个问题。不太确定 Spark 最近的版本是否不再自带这个包。不过,安装 py4j 模块解决了我的问题。

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.”的错误了。

74

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

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

这个在ipython中对我有效。

更新:正如评论中提到的,py4j的压缩文件名在每个Spark版本中都会变化,所以要找对名字。

撰写回答