【python】pyspark.errors.exceptions.base.PySparkRuntimeError: [JAVA_GATEWAY_EXITED] Java gateway proce

pyspark.errors.exceptions.base.PySparkRuntimeError: [JAVA_GATEWAY_EXITED] Java gateway process exited before sending its port number这个错误通常是由于Java,python,spark,pyspark的环境配置问题和版本问题。

版本兼容性

在开始配置环境之前建议检查一下版本。

如果版本不符合上述的话也先按下面流程下来看看能否解决,如果还是不能,则考虑更换版本,以我为例,起初版本为(python3.9,Java17,spark2.4和pyspark3.5),更换(python3.9,Java8即jdk-1.8,spark和pyspark都是3.4.3)版本后环境配置成功。凡事不可一概而论,依照自己本身版本进行更换即可。

Java环境问题

Java建议用Java8(jdk-1.8),在cmd中输入,在使用这个的前提是配置好了JAVA_HOME。

java -version

如果没有配置好的话:此电脑空白处->右键->属性->高级系统设置->高级->环境变量

选择系统变量,新建JAVA_HOME,变量值填Java的安装目录

实在找不到Java的安装目录的话就先在系统变量里面的Path里面新建一个C:\Windows\System32

这样就可以在cmd中输入

where java

只需要到jdk的根目录就可以了,我的jdk根目录即C:\Program Files\Java\jdk-1.8

添加完JAVA_HOME后,在Path中添加%JAVA_HOME%\bin

到此为止,Java的环境就配置好了。

spark环境配置

同理,在下载spark包后将spark解压,建议下载3.x版本。(pip直接安装pyspark问题无法解决,还是直接下载spark包好)

我这个是3.4的下载,下载完后解压后放到合适的文件夹下。

Apache Download Mirrors

同理配置SPARK_HOME环境变量

然后在Path中添加

pyspark环境配置

PYSPARK_PYTHON 应该指向 Python 解释器的路径。PYSPARK_PYTHON 环境变量用于指定 PySpark 应该使用的 Python 解释器的路径。这在使用 PySpark 时非常重要,尤其是在有多个 Python 版本或虚拟环境的情况下

用where python得到路径

同时将spark\python里面的pyspark复制一份到python的lib\site-packages中去

这里还是要注意版本问题,spark和pyspark版本建议一样

这里我的spark版本是3.4.3,也对pyspark版本进行改变(原来是3.5)

pip install pysharp==3.4.3

 而后再检查一下pyspark版本,正确

随后配置PYSPARK_PYTHON,注意要选择全局安装的python路径

同理如果没有配置python环境的话也可以在path中配置python环境

其实上面两个Java的环境变量语句的作用是一样的,一个是具体的,一个是使用环境变量。很多配置都可以以此类推。

测试

设置好后在cmd中输入代码查看环境配置

echo %SPARK_HOME%
echo %PYSPARK_PYTHON%
echo %JAVA_HOME%

直接输入

spark-shell

出现这个则配置成功

pyspark

在python中简单测试

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("TestApp") \
    .getOrCreate()

data = [("Alice", 1), ("Bob", 2)]
df = spark.createDataFrame(data, ["Name", "Id"])
df.show()

输出如下内容则pyspark配置成功

总结

综上所述,安装Java8,再安装合适版本的spark,spark版本和pyspark版本一致更不会出错,配置好JAVA_HOME,SPARK_HOME,PYSPARK_PYTHON。只要环境配置好和版本正确的话就没问题了。

 

作者:Uniquerose

物联沃分享整理
物联沃-IOTWORD物联网 » 【python】pyspark.errors.exceptions.base.PySparkRuntimeError: [JAVA_GATEWAY_EXITED] Java gateway proce

发表回复