Python 找不到密钥:_PYSPARK_驱动程序\u回调\u主机
我正在尝试运行以下代码:Python 找不到密钥:_PYSPARK_驱动程序\u回调\u主机,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我正在尝试运行以下代码: 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, 16
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、Python3.6、Spark 2.3.1
此错误的可能原因是什么?此错误是版本不匹配的结果。回溯中引用的环境变量(
\u PYSPARK\u DRIVER\u CALLBACK\u HOST
)已在期间删除,并在2.3.1中向后移植到2.3分支
考虑版本信息:
我正在使用PyCharm和MacOS、Python3.6、Spark 2.3.1
看起来您已经安装了2.3.1软件包,但是
SPARK\u HOME
指向了较旧的(2.3.0或更早版本)安装。我将要呈现的此解决方案也会处理“未找到密钥:\u PYSPARK\u驱动程序\u回调\u主机/Java网关/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
这应该是最糟糕的。你可以先谢谢我#thumbsup:)您的代码可能无法访问.bash_配置文件或/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)
我也有类似的错误: java.util.NoSuchElementException:找不到键:\u PYSPARK\u驱动程序\u回调\u主机和 异常:Java网关进程在发送其端口号之前退出 运行命令“export PYTHONPATH=$SPARK\u HOME/python/:$PYTHONPATH”或将其设置为.bashrc解决了该问题
还请检查是否设置了mapr Credentail。我也遇到了同样的问题,所有上述设置都不适用于我。事实上我已经准备好回家了。最后一个问题是,我只是使用
pip install pyspark
安装了pyspark,而没有验证版本。
在代码内部进行了大量调试后,发现_PYSPARK_驱动程序_回调_主机
anaconda3/lib/python3.7/site-packages/pyspark/java_gateway.py
没有此变量,而pyspark的旧版本有此变量(我使用的是anaconda,因此有此文件路径位置。其他版本的文件的确切位置可能不同)
最后得出结论,这是由于版本不匹配造成的。看起来很愚蠢,但我想这可能会帮助其他人很多调试时间
解决方案是找出为eg 2.3.0安装的spark版本,然后确保安装相同版本的pysparkpip install pyspark==2.3.0
。在这之后,它就像一个符咒
注意:只有在python中调用SparkSession.builder.appName
时,才会出现此问题。即使在pyspark
和spark submit
命令的版本不匹配的情况下,它也可以正常工作,这就是为什么我很容易忽略了这可能是由于版本不匹配造成的
pip install pyspark==2.3.0
没问题谢谢,在将我的spark版本更新到2.3.1之后,它工作得很好。从2.3升级到2.3.1也对我有用。谢谢@user8371915我正在使用python3.5 Spark 2.1.0,并得到相同的错误“java.util.NoSuchElementException:key not found:_PYSPARK_DRIVER_CALLBACK_HOST”。#。bashrc export PYSPARK\u PYTHON=/usr/bin/python3.5 export PYSPARK\u DRIVER\u PYTHON=/usr/bin/python3.5 export SPARK\u HOME=/opt/SPARK-2.1.0-bin-hadoop2.7 export SCALA\u HOME=/opt/SCALA-2.11.8 export HADOOP\u HOME=/opt/HADOOP-2.7.7 export PATH=$PATH:$JAVA\u HOME/bin:$JRE\u HOME/bin:$SCALA\u HOME/bin:$SPARK:$HADOOP HOME\u导出路径PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$PYTHONPATH有什么想法吗?虽然您的答案与问题的方向一致,但我建议您在代码注释中写更多内容,解释出现错误的原因。