首页 > 解决方案 > 运行 Scala Spark 代码以列出存储中的 blob 时出错

问题描述

google-cloud-storage尝试使用库列出 blob 时出现以下错误:

线程“主”java.lang.NoSuchMethodError 中的异常:com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

我试图更改google-cloud-storage库的版本,build.sbt但一次又一次地得到相同的错误。

import com.google.auth.oauth2.GoogleCredentials
import com.google.cloud.storage._
import com.google.cloud.storage.Storage.BlobListOption

val credentials: GoogleCredentials = GoogleCredentials.getApplicationDefault()
val storage: Storage = StorageOptions.newBuilder().setCredentials(credentials).setProjectId(projectId).build().getService()

val blobs =storage.list(bucketName, BlobListOption.currentDirectory(), BlobListOption.prefix(path))

我的build.sbt样子是这样的:

version := "0.1"

scalaVersion := "2.11.8"

logBuffered in Test := false

libraryDependencies ++=
  Seq(
    "org.apache.spark" %% "spark-core" % "2.2.0" % "provided",
    "org.apache.spark" %% "spark-sql" % "2.2.0" % "provided",
    "org.scalatest" %% "scalatest" % "3.0.0" % Test,
    "com.typesafe" % "config" % "1.3.1",
    "org.scalaj" %% "scalaj-http" % "2.4.0",
    "com.google.cloud" % "google-cloud-storage" % "1.78.0"
  )

请帮我。

标签: scalaapache-sparkgoogle-cloud-platformgoogle-cloud-storagegoogle-cloud-dataproc

解决方案


这是因为 Spark 使用旧版本的 Guava 库而google-cloud-storage不是没有Preconditions.checkArgument方法的库。这导致java.lang.NoSuchMethodError异常。

您可以在此处找到有关如何解决此问题的更详细的答案和说明。


推荐阅读