【问题标题】:Dependency issue with Spark and Google cloud Firestore with SBT使用 SBT 的 Spark 和 Google Cloud Firestore 的依赖性问题
【发布时间】:2020-04-03 16:41:56
【问题描述】:

我的项目在 Intellij sbt 控制台中运行没有问题。

但是当我使用 spark-submit 运行 jar 时使用 sbt 程序集编译后,我得到了这个:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;CLjava/lang/Object;)V

按照 GCP 的建议 here,我围绕依赖项尝试了很多不同的方法

我将 sbt 与程序集插件一起使用。

这是我的 sbt 文件:

name := "firestore-dump"

version := "0.1"

scalaVersion := "2.11.8"

libraryDependencies += "com.google.firebase" % "firebase-admin" % "6.11.0"

libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.4"

libraryDependencies += "org.yaml" % "snakeyaml" % "1.18"
libraryDependencies += "net.liftweb" %% "lift-json" % "3.3.0"

assemblyShadeRules in assembly := Seq(
  ShadeRule.rename("com.google.common.**" -> "repackaged.com.google.common.@1").inAll,
  ShadeRule.rename("com.google.protobuf.**" -> "repackaged.com.google.protobuf.@1").inAll
)

assemblyMergeStrategy in assembly := {
  entry: String => {
    val strategy = (assemblyMergeStrategy in assembly).value(entry)
    if (strategy == MergeStrategy.deduplicate) MergeStrategy.first
    else strategy
  }
}

任何帮助将不胜感激

【问题讨论】:

    标签: java scala apache-spark google-cloud-platform sbt


    【解决方案1】:

    Guava 的Preconditions.checkArgument(boolean, String, Object) 从 Guava 20.0 开始引入。我猜你的依赖有旧版本。

    https://guava.dev/releases/snapshot-jre/api/docs/com/google/common/base/Preconditions.html#checkArgument-boolean-java.lang.String-java.lang.Object-

    你会尝试声明 Guava 依赖 > 20.0 吗?比如

    libraryDependencies += "com.google.guava" %% "guava" % "26.0-android"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-26
      • 2013-09-19
      • 2021-10-08
      • 2019-12-22
      • 2023-03-22
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      相关资源
      最近更新 更多