需要特定版本数据绑定的Spark Scala模块

问题描述

我在尝试让Spark加载,读取和查询镶木地板文件时遇到问题。似乎已经建立了基础结构(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'

那行不通,所以我尝试强制使用databind

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

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

任何帮助将不胜感激。

解决方法

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

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