问题描述
我在尝试让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文件。