IntelliJ中SBT构建Scala Spark项目遇NoClassDefFoundError问题求助
SparkSession类找不到异常解决方法
问题根源
你的spark-sql依赖配置了provided作用域,该作用域仅在编译阶段生效,运行时会依赖外部环境(如Spark集群)提供该类库。但本地直接运行时,IntelliJ不会将provided依赖纳入运行类路径,因此抛出ClassNotFoundException。
修复方案
方案1:移除provided作用域(本地调试快速解决)
修改build.sbt中的spark-sql依赖,删除% "provided"部分:
libraryDependencies += "org.apache.spark" %% "spark-sql" % "3.3.0"
修改后执行sbt clean compile刷新依赖,本地运行即可加载Spark SQL类库。
方案2:保留provided并配置IntelliJ运行时加载(推荐,避免打包冗余)
如果需要保留provided作用域(防止打包时把Spark依赖打进JAR包),可以通过IntelliJ配置让运行时包含该依赖:
- 打开File → Project Structure → Modules,选中项目模块
- 切换到Dependencies标签,找到
spark-sql依赖,将其Scope从Provided改为Compile - 或者在运行配置中单独设置:
- 打开Run/Debug Configurations,选中你的Main类运行项
- 切换到Modifiers标签,勾选Include dependencies with "Provided" scope
额外验证
- 确认
spark-core与spark-sql版本一致(当前均为3.3.0,符合要求) - 执行
sbt clean清理缓存后重新编译,排除依赖缓存问题
内容的提问来源于stack exchange,提问作者llD
相关产品推荐
相关产品推荐

