Docker中Zeppelin创建SparkSession报错:java.lang.NoSuchMethodError
问题分析与解决方案
问题根源
你遇到的java.lang.NoSuchMethodError本质是Scala类库版本冲突:Zeppelin 0.11.0内置的Scala工具类与你挂载的Spark 3.5.0依赖的Scala 2.12.18版本不兼容,导致调用不存在的方法scala.tools.nsc.Settings.usejavacp()。
解决方案
方案1:使用兼容Spark 3.5的Zeppelin镜像(推荐)
Zeppelin 0.11.0官方仅支持Spark 3.3及以下版本,直接使用官方预打包了Spark 3.5的Zeppelin镜像即可彻底避免版本冲突:
docker run -u $(id -u) -p 8080:8080 -p 4040:4040 --rm --name zeppelin apache/zeppelin:0.12.0-spark-3.5
该镜像已内置匹配的Spark 3.5.0、Scala 2.12.x版本,无需手动挂载外部Spark,启动后直接运行你的PySpark代码即可。
方案2:手动调整挂载Spark的配置(适合需自定义Spark环境的场景)
如果必须使用自己的Spark包,需强制Zeppelin使用与Spark一致的Scala版本:
- 修改Docker启动命令,添加Scala版本环境变量:
docker run -u $(id -u) -p 8080:8080 -p 4040:4040 --rm -v /mnt/c/spark:/opt/spark -e SPARK_HOME=/opt/spark -e SCALA_VERSION=2.12.18 --name zeppelin apache/zeppelin:0.11.0 - 进入Zeppelin UI的Interpreters页面,找到Spark解释器:
- 确认
SPARK_HOME已设置为/opt/spark - 将
scala.version参数修改为2.12.18 - 添加以下配置项,强制优先加载Spark的Scala类库:
spark.driver.extraClassPath=/opt/spark/lib/scala-library-2.12.18.jar spark.executor.extraClassPath=/opt/spark/lib/scala-library-2.12.18.jar
- 确认
- 保存配置并重启Spark解释器,再运行你的PySpark代码。
验证
执行你的SparkSession创建代码:
from pyspark import SparkSession spark = (SparkSession.builder .master("local[*]") .appName('PySpark_Tutorial') .getOrCreate())
若成功创建SparkSession且无报错,则问题解决。
内容的提问来源于stack exchange,提问作者RomuchLive
相关产品推荐
相关产品推荐

