【问题标题】:key not found: _PYSPARK_DRIVER_CALLBACK_HOST未找到密钥:_PYSPARK_DRIVER_CALLBACK_HOST
【发布时间】:2018-12-01 22:22:02
【问题描述】:

我正在尝试运行此代码:

import pyspark
from pyspark.sql import SparkSession

spark = SparkSession.builder \
        .master("local") \
        .appName("Word Count") \
        .getOrCreate()

df = spark.createDataFrame([
    (1, 144.5, 5.9, 33, 'M'),
    (2, 167.2, 5.4, 45, 'M'),
    (3, 124.1, 5.2, 23, 'F'),
    (4, 144.5, 5.9, 33, 'M'),
    (5, 133.2, 5.7, 54, 'F'),
    (3, 124.1, 5.2, 23, 'F'),
    (5, 129.2, 5.3, 42, 'M'),
   ], ['id', 'weight', 'height', 'age', 'gender'])

df.show()
print('Count of Rows: {0}'.format(df.count()))
print('Count of distinct Rows: {0}'.format((df.distinct().count())))

spark.stop()

得到一个错误

18/06/22 11:58:39 ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread Thread[main,5,main]
java.util.NoSuchElementException: key not found: _PYSPARK_DRIVER_CALLBACK_HOST
    ...
Exception: Java gateway process exited before sending its port number

我正在使用 PyCharm 和 MacOS、Python 3.6、Spark 2.3.1

这个错误的可能原因是什么?

【问题讨论】:

    标签: python apache-spark pyspark


    【解决方案1】:

    我在升级到 Spark 3.1.1 时遇到了同样的错误 key not found: _PYSPARK_DRIVER_CALLBACK_HOST

    对我有用的是通过 pip install pyspark==3.1.1 升级 pyspark,安装 findspark,然后在启动 SparkSession 之前运行以下几行:

    import findspark
    findspark.init()
    

    【讨论】:

      【解决方案2】:
      pip install pyspark==2.3.0
      

      没问题

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题,以上所有设置都不适合我。实际上我已经设置了 SPARK_HOME。最后问题是因为我只是使用pip install pyspark 安装了pyspark,而没有验证版本。 代码里面经过大量调试,发现里面的_PYSPARK_DRIVER_CALLBACK_HOST

        anaconda3/lib/python3.7/site-packages/pyspark/java_gateway.py

        没有这个变量,而旧版本的 pyspark 有它(我使用 anaconda 因此这个文件路径位置。文件的确切位置可能与其他人不同)

        最后得出的结论是版本不匹配造成的。看起来很愚蠢,但我想这可能会帮助其他人大量调试时间。

        解决方案是找出安装的spark版本,例如2.3.0,然后确保安装相同版本的pysparkpip install pyspark==2.3.0。在此之后,它就像一个魅力。

        注意:仅当我在 python 中调用 SparkSession.builder.appName 时才会出现此问题。即使 pysparkspark-submit 命令的版本不匹配,它也能正常工作,这就是为什么它很容易让我忘记它可能是由于版本不匹配造成的。

        【讨论】:

          【解决方案4】:

          我遇到了类似的错误: java.util.NoSuchElementException:找不到密钥:_PYSPARK_DRIVER_CALLBACK_HOST 和 例外:Java 网关进程在发送其端口号之前退出

          运行命令“export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH”或将其设置为 .bashrc 即可解决问题。

          还请检查是否设置了映射器凭据。

          【讨论】:

            【解决方案5】:

            您的代码可能无法访问 .bash_profile 或 /etc/profile 中的环境变量,请将它们直接放入您的代码中。

            import os
            import sys
            
            os.environ['SPARK_HOME'] = "/opt/cloudera/parcels/SPARK2/lib/spark2"
            os.environ['PYSPARK_SUBMIT_ARGS'] = "--master yarn pyspark-shell" 
            
            
            
            
            sys.path.append(os.path.join(os.environ['SPARK_HOME'], "python"))
            sys.path.append(os.path.join(os.environ['SPARK_HOME'], "python/lib/py4j-0.10.6-src.zip"))
            
            
            try:
                from pyspark import SparkContext
                from pyspark.sql import SparkSession
            
                from pyspark import SparkConf
            
                print("success")
            
            except ImportError as e:
                print("error importing spark modules", e)
                sys.exit(1)
            
            

            【讨论】:

            • 虽然您的回答与问题的方向一致,但我建议您编写更多代码内 cmets,解释错误出现的原因。
            【解决方案6】:

            我将要渲染的这个解决方案还解决了“找不到密钥:_PYSPARK_DRIVER_CALLBACK_HOST/Java Gateway/PySpark 2.3.1”错误!!添加到您的 bashrc 或 /etc/environment 或 /etc/profile

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

            那应该就在那里。你可以提前感谢我。 #thumbup :)

            【讨论】:

              【解决方案7】:

              此错误是版本不匹配的结果。在回溯 (_PYSPARK_DRIVER_CALLBACK_HOST) 中引用的环境变量已在 update Py4j dependency to 0.10.7 期间删除,并在 2.3.1 中向后移植到 2.3 分支。

              考虑版本信息:

              我正在使用 PyCharm 和 MacOS、Python 3.6、Spark 2.3.1

              您似乎安装了 2.3.1 软件包,但 SPARK_HOME 指向较旧的(2.3.0 或更早版本)安装。

              【讨论】:

              • 谢谢,将我的 spark 版本更新到 2.3.1 后它工作正常。
              • 从 2.3 升级到 2.3.1 也对我有用。谢谢!
              • @user8371915 我正在使用 python3.5 Spark 2.1.0 并收到相同的错误“java.util.NoSuchElementException:找不到密钥:_PYSPARK_DRIVER_CALLBACK_HOST”。 # .bashrc export PYSPARK_PYTHON=/usr/bin/python3.5 export PYSPARK_DRIVER_PYTHON=/usr/bin/python3.5 export SPARK_HOME=/opt/spark-2.1.0-bin-hadoop2.7 export SCALA_HOME=/opt /scala-2.11.8 export HADOOP_HOME=/opt/hadoop-2.7.7 export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$HADOOP_HOME/bin export PATH export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$PYTHONPATH 有什么想法吗?
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-10-18
              • 1970-01-01
              • 2017-01-25
              • 2014-12-22
              • 2016-10-08
              相关资源
              最近更新 更多