我需要使用 Spark 處理檔案中的資料并保存到 GCP BigQuery,但是當 spark 讀取發生并且 sbt 根據主要需要具有 GCP BigQuery 的庫依賴項時,我遇到了例外。
我面臨的例外:
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")
為了解決這個問題,我嘗試了以下方法,但這些方法都不起作用,例外仍然存在。
像這樣從 BigQuery 在 sbt 中的依賴項中排除資料系結依賴項,
libraryDependencies = Seq("com.google.cloud" % "google-cloud-bigquery" % "2.15.0", exclude ("com.fasterxml.jackson.core", "jackson-core") exclude ("com .fasterxml.jackson.core", "jackson-databind") 排除 ("com.fasterxml.jackson.core", "jackson-annotations") )
排除依賴,然后像這樣在 sbt 中顯式添加,
libraryDependencies = Seq("com.google.cloud" % "google-cloud-bigquery" % "2.15.0", exclude ("com.fasterxml.jackson.core", "jackson-core") exclude ("com .fasterxml.jackson.core", "jackson-databind") 排除 ("com.fasterxml.jackson.core", "jackson-annotations"), "com.fasterxml.jackson.core" % "jackson-databind" % " 2.12.0", "com.fasterxml.jackson.core" % "jackson-core" % "2.12.0" )
嘗試更改 BigQuery 依賴項的各種版本,例如
2.14.0, 2.13.0, 2.12.0 and 2.10.0
試圖改變像
2.12.13
奇怪的是,如果我洗掉 BigQuery 的依賴項,那么 Spark 代碼運行良好,沒有任何錯誤
到目前為止,沒有任何效果,我仍然不確定問題的根本原因。如果我能在這里得到快速幫助,我將不勝感激。隨意建議嘗試的事情。先感謝您!
uj5u.com熱心網友回復:
我確定了根本原因并找到了解決方案
問題是 Spark 和 BigQuery 使用的 jackson 不同,所以我嘗試使用使用 BigQuery 使用的相同 jackson 的 Spark(我無法更改 Bigquery 的版本,因為它已經是最新的)。
我將 Spark 升級到 3.3.0 并且它作業正常。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/508582.html
標籤:Google Cloud Collective 爪哇 斯卡拉 阿帕奇火花 谷歌大查询 sbt