提问者:小点点

GCPBigQuery依赖导致火花读取失败,杰克逊数据依赖错误


我需要处理数据从文件使用火花,并保存到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代码运行良好,没有任何错误

    到目前为止,没有任何效果,我仍然不确定问题的根本原因。如果我在这里得到快速帮助,我将不胜感激。请随时提出尝试的建议。提前感谢!


  • 共1个答案

    匿名用户

    我找到了根本原因并找到了解决方案

    问题是Spark和BigQuery使用的jackson不同,所以我尝试使用与BigQuery使用的jackson相同的Spark(我无法更改Bigquery的版本,因为它已经是最新的)。

    我将Spark升级到3.3.0,它起作用了。