You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Sedona执行报错:scala/collection/IterableOnce类未找到

解决SedonaContext创建时的Scala类加载冲突问题

问题原因

报错java.lang.NoClassDefFoundError: scala/collection/IterableOnce的核心原因是:该类仅在Scala 2.13及以上版本中存在,而你指定的Sedona依赖是基于Scala 2.12编译的(sedona-spark-3.4_2.12:1.6.1),但运行环境中意外引入了Scala 2.13的依赖包,导致类加载矛盾。

解决方案

1. 强制锁定Scala 2.12版本依赖

修改SparkSession配置,手动指定Scala 2.12的标准库依赖,覆盖传递依赖带来的高版本Scala包:

spark = SparkSession.builder \
    .appName("SedonaTest") \
    .config("spark.jars.packages", "org.apache.sedona:sedona-spark-3.4_2.12:1.6.1,org.datasyslab:geotools-wrapper:1.6.1-28.2,org.scala-lang:scala-library:2.12.18") \
    .getOrCreate()

sedona = SedonaContext.create(spark)

注:2.12.18可替换为你本地Spark环境使用的Scala 2.12具体小版本。

2. 排除冲突的Scala依赖

如果是第三方依赖(如geotools-wrapper的传递依赖)拉取了Scala 2.13包,可通过spark.jars.excludes排除高版本Scala库:

spark = SparkSession.builder \
    .appName("SedonaTest") \
    .config("spark.jars.packages", "org.apache.sedona:sedona-spark-3.4_2.12:1.6.1,org.datasyslab:geotools-wrapper:1.6.1-28.2") \
    .config("spark.jars.excludes", "org.scala-lang:scala-library") \
    .getOrCreate()

此配置会强制使用Spark自带的Scala 2.12版本库。

3. 手动添加本地Jar包(避免动态依赖冲突)

  • 下载对应版本的Jar包:sedona-spark-3.4_2.12-1.6.1.jar、geotools-wrapper-1.6.1-28.2.jar
  • 将Jar包复制到Spark安装目录的jars文件夹下
  • 调整代码,移除spark.jars.packages配置:
spark = SparkSession.builder \
    .appName("SedonaTest") \
    .getOrCreate()

sedona = SedonaContext.create(spark)

4. 清理Spark依赖缓存

如果之前拉取过错误版本的依赖,清理本地缓存后重新拉取:

# 清理Ivy缓存(Spark默认依赖管理工具)
rm -rf ~/.ivy2/cache/org.apache.sedona
rm -rf ~/.ivy2/cache/org.datasyslab

# 清理Maven缓存(若使用Maven作为依赖源)
rm -rf ~/.m2/repository/org/apache/sedona
rm -rf ~/.m2/repository/org/datasyslab

额外验证点

  • 执行spark-shell查看控制台输出的Scala版本,确保是2.12.x
  • 执行pip show pyspark查看版本,需与SPARK_HOME对应版本匹配

内容的提问来源于stack exchange,提问作者systfail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:38:12