【问题标题】:Why can't PySpark find py4j.java_gateway?为什么 PySpark 找不到 py4j.java_gateway?
【发布时间】:2014-12-19 10:06:10
【问题描述】:

我安装了 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

【问题讨论】:

  • 我不知道这是否是一个真正的答案,但sudo pip install py4j 为我解决了这个问题。我假设此错误是在您已将 SPARK_HOME 添加到 PYTHON_PATH 之后出现的?
  • 我提供了相同(或类似问题)的答案。我可能对你有帮助:stackoverflow.com/questions/24249847/…
  • 我还将我的PYTHONPATH 设置为指向所有需要的python 依赖项,但得到了同样的错误。为了解决这个问题,我还必须 1)在安装了常用 python 包的site-packages 文件夹中安装另一个 py4j 副本 2)更改 py4j 文件夹中所有内容的权限,以便 YARN 执行程序节点可以读取/执行相关文件.

标签: python python-2.7 apache-spark ipython py4j


【解决方案1】:

在我的环境中(使用 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 中对我有用。

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

【讨论】:

  • 这是 Spark 1.6.0 中的 export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH
  • py4j zip 文件的名称随每个 Spark 版本而变化,因此请确保您在 $PYTHONPATH 中指向的 zip 文件确实存在。
【解决方案2】:

我通过在 .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。

【讨论】:

  • 我也面临同样的问题。我应该在哪里写这些出口声明?我在 cmd 提示符和 ipython notebook 中尝试过。在他们中的任何一个中它都不适合我
  • 我将spark路径、python 2.7路径和py4j zip文件路径设置为环境系统变量路径。我无法解决问题。当我运行 from pyspar import SparkContext 时出现错误。
  • 添加 ':$PYTHONPATH' 有什么作用?
【解决方案3】:

安装 pip 模块“py4j”。

pip install py4j

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

【讨论】:

  • 您必须使用 Spark 附带的 py4j 版本。甚至从 Spark 2.2 到 2.3 的升级也使用不兼容的 py4j 版本。
【解决方案4】:

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

它对我有用。

【讨论】:

    【解决方案5】:
    #/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)
    

    【讨论】:

      【解决方案6】:

      要使用 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

      【讨论】:

      • 感谢您的详细解释。在 Windows 中仍然不适合我。
      猜你喜欢
      • 2021-09-21
      • 1970-01-01
      • 2011-06-17
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多