Scala 2.12+Spark3集成Sedona报错:GeotiffFileFormat无法实例化
解决思路
问题根源
你的build.sbt中混合了Spark 2.4/Scala 2.11和Spark 3.0/Scala 2.12版本的Sedona依赖,版本不匹配直接触发类加载失败:
sedona-python-adapter-2.4_2.11和sedona-viz-2.4_2.11是针对Spark 2.4、Scala 2.11编译的,依赖Spark 2.x特有的org.apache.spark.sql.execution.datasources.FileFormat$class抽象类- 而Spark 3.x中该类的实现结构已变更,导致运行时找不到对应类,抛出
NoClassDefFoundError
修复步骤
1. 统一所有Sedona依赖的版本匹配
修改build.sbt,移除Spark 2.4/Scala 2.11的依赖,替换为适配Spark 3.0、Scala 2.12的版本:
ThisBuild / scalaVersion := "2.12.12" libraryDependencies ++= Seq( "org.apache.spark" % "spark-core_2.12" % "3.0.1", "org.apache.spark" % "spark-sql_2.12" % "3.0.1", // 替换为Spark3.0、Scala2.12对应的Sedona组件 "org.apache.sedona" % "sedona-core-3.0_2.12" % "1.2.1-incubating", "org.apache.sedona" % "sedona-sql-3.0_2.12" % "1.2.1-incubating", // 如果需要Python适配器和可视化组件,使用对应版本 "org.apache.sedona" % "sedona-python-adapter-3.0_2.12" % "1.2.1-incubating", "org.apache.sedona" % "sedona-viz-3.0_2.12" % "1.2.1-incubating" )
注意:所有Sedona依赖的命名规则为
sedona-组件名-Spark版本_Scala版本,必须与你的Spark、Scala版本完全对齐。
2. 清理构建缓存并重新编译
执行以下命令清理旧依赖缓存,避免残留冲突:
sbt clean sbt compile
3. 验证依赖一致性
运行sbt dependencyTree检查所有依赖的Spark版本是否统一,确保没有混入Spark 2.x的依赖。
内容的提问来源于stack exchange,提问作者IcePack
相关产品推荐
相关产品推荐

