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

Spark 3.3.0适配的geomesa-accumulo版本及安装报错咨询

适配Spark 3.3.0的GeoMesa-Accumulo版本及SPI报错解决方案

一、版本适配说明

Spark 3.3.0默认使用Scala 2.12,你之前选用的geomesa-accumulo_2.11-2.0.0是针对Scala 2.11和Spark 2.x的版本,必然出现兼容性问题。适配Spark 3.3.0的推荐版本:

  • GeoMesa-Accumulo 3.5.0(稳定版,适配Scala 2.12 + Spark 3.x)
  • 或 GeoMesa-Accumulo 4.0.0(最新版,同样支持Scala 2.12 + Spark 3.x)

注意必须选择后缀为_2.12的包,确保Scala版本与Spark完全匹配。

二、解决DataStoreFactorySpi SPI报错的方法

该报错源于GeoTools的SPI服务注册与Java ImageIO的SPI扫描机制冲突,以下是几种可行的解决方式:

方法1:设置系统属性禁用ImageIO SPI扫描

在启动Spark(或Jupyter Notebook)时添加系统属性:

-Djavax.imageio.spi.ClassLoader=com.sun.imageio.spi.ClassLoaderUtil

也可在Scala代码开头直接设置:

System.setProperty("javax.imageio.spi.ClassLoader", "com.sun.imageio.spi.ClassLoaderUtil")

方法2:排除冲突的GeoTools依赖

若通过Maven/SBT引入依赖,排除引发冲突的gt-image模块:

  • SBT配置:
libraryDependencies += "org.locationtech.geomesa" % "geomesa-accumulo-spark-runtime_2.12" % "3.5.0" exclude("org.geotools", "gt-image")
  • Maven配置:
<dependency>
    <groupId>org.locationtech.geomesa</groupId>
    <artifactId>geomesa-accumulo-spark-runtime_2.12</artifactId>
    <version>3.5.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.geotools</groupId>
            <artifactId>gt-image</artifactId>
        </exclusion>
    </exclusions>
</dependency>

方法3:正确配置Spark类路径

在Docker容器中启动Spark时,确保GeoMesa和GeoTools的JAR包被正确添加到Spark的--jars参数中,避免类加载器冲突:

spark-shell --jars /path/to/geomesa-accumulo-spark-runtime_2.12-3.5.0.jar,/path/to/geotools-*.jar

若使用Jupyter PySpark,可在配置中添加:

import pyspark
conf = pyspark.SparkConf()
conf.set("spark.jars", "/path/to/geomesa-accumulo-spark-runtime_2.12-3.5.0.jar")
sc = pyspark.SparkContext(conf=conf)

额外修正:PostGIS DataStore参数优化

你的代码中"geotools" -> "true"参数属于冗余配置,PostGIS的DataStore无需该参数,建议移除以避免不必要的初始化问题:

val dataStoreParams = Map( 
    "dbtype" -> "postgis",
    "host" -> "backend-postgres", 
    "user" -> "postgres", 
    "passwd" -> "mypassword", 
    "port" -> "5432", 
    "database" -> "dev")

val dataStore = DataStoreFinder.getDataStore(dataStoreParams);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:15:31