使用PySpark v3.6.4运行KMeans聚类代码时遇Py4JJavaError求助
解决PySpark 3.6.4中
Py4JJavaError(asm5 ClassReader异常)的方案 这个Py4JJavaError搭配org.apache.xbean.asm5.ClassReader的异常我之前帮不少开发者排查过,大概率是Java版本和PySpark依赖的ASM库不兼容导致的,尤其是你用的PySpark 3.6.4,咱们一步步来解决:
第一步:检查并匹配Java版本
PySpark 3.6.x官方推荐使用Java 8或Java 11,如果你当前用的是Java 17及以上版本,就会出现ASM库版本跟不上的问题。先在终端/命令行执行java -version确认版本:- 如果版本高于11,建议切换到Java 8或11:Linux/macOS可以用
update-alternatives管理版本,Windows则修改系统环境变量JAVA_HOME指向对应版本的JDK。
- 如果版本高于11,建议切换到Java 8或11:Linux/macOS可以用
第二步:强制指定兼容的ASM库版本
如果暂时没法更换Java版本,可以在启动SparkSession时手动指定适配高Java版本的ASM依赖。在你的Jupyter Notebook里,创建SparkSession前加入这段代码:from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("KMeansRF") \ .config("spark.driver.extraClassPath", "org.ow2.asm:asm:9.5") \ .config("spark.executor.extraClassPath", "org.ow2.asm:asm:9.5") \ .getOrCreate()这里用的asm 9.5是兼容Java 17+的版本,你也可以根据自己的Java版本调整(比如Java 8可以用asm 5.x或7.x)。
第三步:清理缓存与依赖冲突
本地Spark缓存或第三方库可能和PySpark依赖冲突,试试这两个操作:- 关闭Jupyter Notebook,清除Spark临时目录(通常在
~/spark-warehouse或系统临时文件夹) - 检查Python环境中是否安装了独立的
asm包,若有则执行pip uninstall asm,避免和Spark自带的ASM库冲突。
- 关闭Jupyter Notebook,清除Spark临时目录(通常在
第四步:验证环境有效性
重启Jupyter后,先运行一段简单的Spark代码测试环境:df = spark.createDataFrame([(1, "a"), (2, "b")], ["id", "val"]) df.show()如果这段代码正常运行,再去执行KMeans和Random Forest的业务代码,大概率就不会再触发那个ClassReader错误了。
内容的提问来源于stack exchange,提问作者user37649
相关产品推荐
相关产品推荐

