Apache Toree Spark内核启动失败(java.lang.NoSuchMethodError)及Scala版本疑问
解决Toree内核无法激活(java.lang.NoSuchMethodError)的问题
这个问题我之前也碰到过,核心原因就是Toree使用的Scala版本和Spark内置的Scala版本不兼容——Spark 2.3.0官方绑定的是Scala 2.11.x系列(具体是2.11.8),而你默认安装的Toree可能用了更高版本的Scala(比如2.12),导致运行时出现方法找不到的错误。
第一步:确认Spark的Scala版本
先打开终端执行以下命令,查看Spark自带的Scala版本:
$SPARK_HOME/bin/spark-shell
启动日志的开头会显示类似这样的内容,里面的Scala版本就是你需要匹配的:
Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_382)
第二步:卸载现有不兼容的Toree内核
先把之前安装的错误版本内核清理掉:
jupyter kernelspec remove spark
如果是用户级安装的内核,也可以直接删除对应的文件夹:
rm -rf ~/.local/share/jupyter/kernels/spark
第三步:安装对应Scala版本的Toree
用pip安装时,明确指定和Spark匹配的Scala版本(这里以2.11.8为例),同时选择和Spark 2.3.0兼容的Toree版本(推荐0.4.0):
pip install toree==0.4.0 --scala-version=2.11.8 --user
第四步:重新安装Jupyter内核
再次执行内核安装命令,同样指定Scala版本:
jupyter toree install --spark_home=$SPARK_HOME --user --scala-version=2.11.8
第五步:验证修复
启动Jupyter Notebook或Lab,新建一个Apache Spark Scala笔记本,此时内核应该能正常激活,不会再出现java.lang.NoSuchMethodError错误。
额外注意事项
- 永远确保Toree的Scala版本和Spark的Scala版本完全一致,哪怕是小版本号的差异都可能导致兼容性问题。
- 如果安装时遇到权限问题,
--user参数会将Toree安装在当前用户目录下,避免全局安装的冲突。 - 可以检查内核配置文件
~/.local/share/jupyter/kernels/spark/kernel.json,确认里面的环境变量没有指向错误的Scala或Spark路径。
内容的提问来源于stack exchange,提问作者Ébe Isaac
相关产品推荐
相关产品推荐

