【问题标题】:Scala module requiring specific version of data bind for SparkScala 模块需要特定版本的 Spark 数据绑定
【发布时间】:2021-02-10 06:24:28
【问题描述】:

我在尝试让 Spark 加载、读取和查询 parquet 文件时遇到问题。基础设施似乎已设置好(Spark 独立 3.0),可以看到并将接手工作。

我遇到的问题是何时调用此行

    Dataset<Row> parquetFileDF = sparkSession.read().parquet(parquePath);

抛出以下错误

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Scala module 2.10.0 requires Jackson Databind version >= 2.10.0 and < 2.11.0
    at com.fasterxml.jackson.module.scala.JacksonModule.setupModule(JacksonModule.scala:61)

我查看了JacksonModule.setupModule,当它到达context.getMapperVersion 时,正在传递的版本是 2.9.10。在我看来,DefaultScalaModule 正在拉一些旧版本。

我正在使用 Gradle 构建并设置依赖项

    implementation 'com.fasterxml.jackson.core:jackson-core:2.10.0'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.0'
    implementation 'org.apache.spark:spark-core_2.12:3.0.0'
    implementation 'org.apache.spark:spark-sql_2.12:3.0.0'
    implementation 'org.apache.spark:spark-launcher_2.12:3.0.0'
    implementation 'org.apache.spark:spark-catalyst_2.12:3.0.0'
    implementation 'org.apache.spark:spark-streaming_2.12:3.0.0'

这不起作用,所以我尝试强制数据绑定

    implementation ('com.fasterxml.jackson.core:jackson-databind') {
        version {
            strictly '2.10.0'
        }
    }

我尝试了几个不同的版本,但仍然遇到这个问题。也许我错过了一些超级简单的东西,但现在,我似乎无法克服这个错误。

任何帮助将不胜感激。

【问题讨论】:

  • 如果您添加gradle dependencies(或./gradlew dependencies,如果您正在使用包装器)的输出,您可能会获得更多帮助。

标签: java scala apache-spark jackson-databind


【解决方案1】:

我能够找出问题所在。我正在从另一个项目中提取 jar 文件。 jar 文件中的功能根本没有被使用,所以这不是可疑的。不幸的是,该项目尚未更新,并且有一些较旧的 Spark 库被我当前正在运行的应用程序所采用。一旦我删除它,错误就消失了。有趣的是,依赖关系图没有显​​示任何关于其他 jar 文件正在使用的库的信息。

我想如果您遇到类似的问题,请仔细检查任何正在导入的 jar 文件。

【讨论】:

    猜你喜欢
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多