我需要处理数据从文件使用火花,并保存到GCPBigQuery,但我卡住了一个异常时,火花读取发生和sbt库依赖GCPBigQuery根据主要需要。
我面临的例外:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Scala module 2.12.3 requires Jackson Databind version >= 2.12.0 and < 2.13.0
at com.fasterxml.jackson.module.scala.JacksonModule.setupModule(JacksonModule.scala:61)
at com.fasterxml.jackson.module.scala.JacksonModule.setupModule$(JacksonModule.scala:46)
at com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:17)
at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:853)
at org.apache.spark.rdd.RDDOperationScope$.<init>(RDDOperationScope.scala:82)
at org.apache.spark.rdd.RDDOperationScope$.<clinit>(RDDOperationScope.scala)
代码参考如下…
SBT文件:
ThisBuild / version := "0.1.0"
ThisBuild / scalaVersion := "2.12.12"
lazy val root = (project in file("."))
.settings(
name := "spark-code"
)
lazy val sparkVersion = "3.2.0"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion,
"org.apache.spark" %% "spark-sql" % sparkVersion,
"org.rogach" %% "scallop" % "4.0.2",
"com.google.cloud" % "google-cloud-pubsub" % "1.120.11",
"com.google.cloud" % "google-cloud-bigquery" % "2.15.0",
"com.google.code.gson" % "gson" % "2.8.9",
"com.crealytics" %% "spark-excel" % "0.14.0"
)
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.first
}
火花代码:
spark.read
.format("csv")
.load("mypath")
为了解决这个问题,我尝试了以下方法,但没有一个奏效,异常仍然存在。
>
像这样从sbt中的BigQuery依赖中排除数据绑定依赖,
库依赖项=Seq("com.google.cloud"%"google-blod-bigquery"%"2.15.0",排除("com. fasterxml.jackson.core","jackson-core")排除("com.fasterxml.jackson.core","jackson-datind")排除("com.fasterxml.jackson.core","jackson-注解"))
排除依赖然后像这样在sbt中显式添加,
库依赖项=Seq("com.google.cloud"%"google-Cloud-bigquery"%"2.15.0",排除("com. fasterxml.jackson.core","jackson-core")排除("com.fasterxml.jackson.core","jackson-Datind")排除("com.fasterxml.jackson.core","jackson-注解"),"com.fasterxml.jackson.core"%"jackson-Datind"%"2.12.0","com.fasterxml.jackson.core"%"jackson-core"%"2.12.0")
尝试更改BigQuery依赖项的各种版本,例如2.14.0、2.13.0、2.12.0和2.10.0
尝试更改scala版本,如2.12.13
奇怪的是,如果我删除BigQuery的依赖项,那么Spark代码运行良好,没有任何错误
到目前为止,没有任何效果,我仍然不确定问题的根本原因。如果我在这里得到快速帮助,我将不胜感激。请随时提出尝试的建议。提前感谢!
我找到了根本原因并找到了解决方案
问题是Spark和BigQuery使用的jackson不同,所以我尝试使用与BigQuery使用的jackson相同的Spark(我无法更改Bigquery的版本,因为它已经是最新的)。
我将Spark升级到3.3.0,它起作用了。