Windows启动PySpark 3.2.1报StorageUtils类缺失等错误求助
故障定位
你触发的致命报错为java.lang.NoClassDefFoundError: Could not initialize class org.apache.spark.storage.StorageUtils$,根因是Spark 3.2.1与当前安装的高版本JDK不兼容。
从报错栈的类路径java.base/xxx可以判断你当前使用的是JDK 17及以上版本,Spark 3.2.x官方仅兼容JDK 8、JDK 11两个LTS版本,高版本JDK移除了Spark依赖的部分Java内部API,直接导致StorageUtils类初始化失败。后续提示的SparkContext重复构造警告、进程自动终止都是类初始化失败引发的连带问题,启动阶段出现的native-hadoop库加载警告不影响PySpark基础功能运行,无需优先处理。
修复方案
按优先级选择以下任意一种方案即可:
方案1:更换兼容JDK版本(Windows环境下推荐,稳定性最高)
- 卸载当前安装的JDK 17/18等高版本,下载安装JDK 8(推荐1.8u202之后的稳定版本)或JDK 11
- 重新配置系统环境变量:将
JAVA_HOME指向新安装的JDK根目录,将%JAVA_HOME%\bin添加到系统Path变量的靠前位置,避免系统优先调用旧版本Java - 打开新的命令提示符窗口,执行
java -version验证版本,确认输出为1.8.x或11.x版本 - 打开任务管理器结束所有残留的java.exe、pyspark.exe进程,重新在Spark的bin目录下执行
pyspark命令即可正常启动
方案2:升级Spark版本适配高版本JDK
如果需要保留当前高版本JDK,直接将Spark升级到3.3.0及以上版本即可,Spark从3.3.0版本开始正式支持JDK 17。
补充说明
命令执行后出现的进程终止提示是PySpark启动失败后,自带的清理脚本自动回收残留Java进程的正常行为,不需要额外处理。如果后续启动时出现Hadoop文件系统权限相关报错,下载对应Hadoop 3.2版本的winutils.exe放到Spark的bin目录,配置HADOOP_HOME环境变量指向Spark根目录即可解决。
内容的提问来源于stack exchange,提问作者Dinesh
相关产品推荐
相关产品推荐

