为什么PySpark找不到py4j.java_gateway?

use*_*419 43 ipython python-2.7 py4j apache-spark

我安装了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
Run Code Online (Sandbox Code Playgroud)

nea*_*mcb 67

在我的环境中(使用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
Run Code Online (Sandbox Code Playgroud)

这对我来说是在ipython中起作用的.

更新:如评论中所述,py4j zip文件的名称随每个Spark版本而变化,因此请查看正确的名称.

  • 这是Spark 1.6.0中的`export PYTHONPATH = $ SPARK_HOME/python/lib/py4j-0.9-src.zip:$ PYTHONPATH` (11认同)
  • py4j zip文件的名称随每个Spark版本而变化,因此请确保您在`$ PYTHONPATH`中指向的zip文件确实存在. (3认同)

And*_*son 27

我通过在.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
Run Code Online (Sandbox Code Playgroud)

在此之后,它永远不会引发ImportError:没有名为py4j.java_gateway的模块.


kn_*_*van 9

安装 pip 模块“py4j”。

pip install py4j

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

  • 您必须使用 Spark 附带的 py4j 版本。即使从 Spark 2.2 升级到 2.3 也使用不兼容的 py4j 版本。 (3认同)