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

Spark Mongo Connector 10.2.1使用objectOrArrayOnly报错求助

问题

使用Spark Mongo Connector 10.2.1版本,通过spark-submit的--jars参数传入依赖包,运行时出现以下错误:

Caused by: com.mongodb.spark.sql.connector.exceptions.ConfigException: 'objectOrArrayOnly' is not a valid Convert Json Type
    at com.mongodb.spark.sql.connector.config.WriteConfig$ConvertJson.fromString(WriteConfig.java:96)
    at com.mongodb.spark.sql.connector.config.WriteConfig.convertJson(WriteConfig.java:298)
    at com.mongodb.spark.sql.connector.write.MongoDataWriter.<init>(MongoDataWriter.java:74)
    at com.mongodb.spark.sql.connector.write.MongoDataWriterFactory.createWriter(MongoDataWriterFactory.java:53)
    at org.apache.spark.sql.execution.datasources.v2.DataWritingSparkTask$.run(WriteToDataSourceV2Exec.scala:408)
    at org.apache.spark.sql.execution.datasources.v2.V2TableWriteExec.$anonfun$writeWithV2$2(WriteToDataSourceV2Exec.scala:360)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:90)
    at org.apache.spark.scheduler.Task.run(Task.scala:131)
    at org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$3(Executor.scala:497)
    at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1439)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:500)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:750)
Caused by: java.lang.IllegalArgumentException: No enum constant com.mongodb.spark.sql.connector.config.WriteConfig.ConvertJson.OBJECTORARRAYONLY
    at java.lang.Enum.valueOf(Enum.java:238)
    at com.mongodb.spark.sql.connector.config.WriteConfig$ConvertJson.valueOf(WriteConfig.java:73)
    at com.mongodb.spark.sql.connector.config.WriteConfig$ConvertJson.fromString(WriteConfig.java:94)

查看10.2.1版本源码,发现ConvertJson枚举中包含objectOrArrayOnly选项:

public static enum ConvertJson {
        FALSE("false"),
        ANY("any"),
        OBJECT_OR_ARRAY_ONLY("objectOrArrayOnly");

        private final String value;
        private static final String TRUE = "true";

        private ConvertJson(String operationType) {
            this.value = operationType;
        }

        static ConvertJson fromString(String jsonType) {
            if (jsonType.equalsIgnoreCase("true")) {
                WriteConfig.LOGGER.warn("{}: '{}' is deprecated. Use: '{}' instead.", new Object[]{"convertJson", "true", ANY});
                return ANY;
            } else {
                try {
                    return valueOf(jsonType.toUpperCase(Locale.ROOT));
                } catch (IllegalArgumentException var2) {
                    throw new ConfigException(String.format("'%s' is not a valid Convert Json Type", jsonType), var2);
                }
            }
        }

        public String toString() {
            return this.value;
        }
    }

怀疑实际运行时未使用指定的10.2.1版本,该如何解决?

解决方案

  • 排查依赖冲突:
    执行spark-submit时添加--verbose参数,查看运行时加载的Mongo Connector版本。或者在代码中添加以下代码打印实际加载的版本:

    println("Mongo Spark Connector Version: " + com.mongodb.spark.sql.connector.config.Version.getVersion)
    

    确认是否存在旧版本依赖被优先加载的情况。

  • 强制指定版本优先级:
    使用--jars传入依赖时,确保10.2.1版本的jar包路径正确,且没有其他旧版本的Mongo Connector jar包在Spark的classpath中。如果是集群环境,检查集群节点的spark/jars目录是否存在旧版本jar包,如有则删除或替换为10.2.1版本。

  • 使用--packages替代--jars:
    放弃手动传入jar包,改用spark-submit的--packages参数自动拉取指定版本的依赖,避免手动管理jar包的版本冲突问题:

    spark-submit --packages org.mongodb.spark:mongo-spark-connector_2.12:10.2.1 ...(其他参数)
    

    注意根据你的Scala版本调整_2.12部分(例如Scala 2.11对应_2.11)。

  • 检查配置参数的拼写:
    确认代码或配置文件中convertJson参数的值是objectOrArrayOnly,注意大小写和下划线,避免拼写错误。虽然源码中支持该值,但如果参数写错也会触发类似错误。

  • 清理缓存:
    清理Spark的本地缓存目录(默认是./spark-warehouse或指定的临时目录),以及Maven/Ivy的本地仓库中旧版本的Mongo Connector依赖,确保拉取的是最新的10.2.1版本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:43:25