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

Emm*_*l F 7 java scala apache-spark jackson-databind

我在尝试让 Spark 加载、读取和查询镶木地板文件时遇到问题。基础设施似乎已建立(Spark 独立版 3.0)并且可以看到并且将开始工作。

我遇到的问题是当这条线被调用时

    Dataset<Row> parquetFileDF = sparkSession.read().parquet(parquePath);
Run Code Online (Sandbox Code Playgroud)

抛出以下错误

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)
Run Code Online (Sandbox Code Playgroud)

我查看了一下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'
Run Code Online (Sandbox Code Playgroud)

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

    implementation ('com.fasterxml.jackson.core:jackson-databind') {
        version {
            strictly '2.10.0'
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

任何帮助,将不胜感激。

Emm*_*l F 4

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

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