提交Scala Spark项目时SparkSession类找不到问题求助
解决Scala Spark项目中
org.apache.spark.sql.SparkSession$类找不到的问题 以下是针对这个ClassNotFoundException的常见排查和解决方法:
确认Spark版本匹配
SparkSession是Spark 2.x及以上版本引入的API,若本地项目依赖的Spark版本与运行集群的Spark版本不一致,就会触发该错误。比如本地用3.x版本,集群却是1.x,或者反过来。
解决:在项目构建文件(如sbt的build.sbt)中指定和集群一致的Spark版本,并且标记为Provided(因为集群环境已包含Spark依赖,无需打包到项目jar中):libraryDependencies += "org.apache.spark" %% "spark-sql" % "3.3.0" % Provided替换
3.3.0为你集群实际的Spark版本。检查打包配置
若使用sbt assembly等插件打包,可能误将Spark核心依赖打包进项目jar,导致和集群的依赖冲突,或者缺失必要的类。
解决:在assembly配置中排除Spark相关依赖,避免重复打包:assemblyExcludedJars in assembly := { val cp = (fullClasspath in assembly).value cp.filter { jar => jar.data.getName.startsWith("spark-") || jar.data.getName.startsWith("hadoop-") } }修正spark-submit命令参数
如果集群环境没有默认包含Spark SQL依赖(这种情况较少见,但可能存在),需要在提交时显式引入:spark-submit --packages org.apache.spark:spark-sql_2.12:3.3.0 your-project.jar替换版本号为集群对应的版本,
2.12是Scala版本,要和项目的Scala版本保持一致。验证集群Spark依赖完整性
检查集群的Spark安装目录下lib文件夹,确认存在spark-sql_*.jar文件,并且文件权限正常,确保集群的ClassLoader能加载到这个类。
内容的提问来源于stack exchange,提问作者Gaurav
相关产品推荐
相关产品推荐

