1

我已经尝试使用 p12 密钥文件,它成功运行并且我能够从 gcs 存储桶中获取数据。但是使用 json 密钥文件 sparksession 没有获取 json 配置值。相反,它适用于默认元数据。我正在使用 maven 和 IntelliJ 进行开发。下面是代码片段

def main(args: Array[String]): Unit = {
System.out.println("hello gcp connect")
System.setProperty("hadoop.home.dir", "C:/hadoop/")
val sparkSession =
  SparkSession.builder()
    .appName("my first project")
    .master("local[*]")
    .config("spark.hadoop.fs.gs.project.id", "shaped-radius-297301")
    .config("spark.hadoop.fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem")
    .config("spark.hadoop.fs.AbstractFileSystem.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS")
    .config("spark.hadoop.google.cloud.project.id", "shaped-radius-297301")
    .config("spark.hadoop.google.cloud.auth.service.account.enable", "true")
    .config("spark.hadoop.google.cloud.auth.service.account.email", "service-account@shaped-radius-297301.iam.gserviceaccount.com")
    .config("spark.hadoop.google.cloud.service.account.json.keyfile", "C:/Users/shaped-radius-297301-5bf673d7f0d2.json")
    .getOrCreate()
    sparkSession.sparkContext.addFile("gs://test_bucket/sample1.csv")
    sparkSession.read.csv(SparkFiles.get("sample1.csv")).show()
4

2 回答 2

0

设置凭证文件时出现问题,密钥文件 vin 数据砖,所以我使用

libraryDependencies += "com.github.samelamin" %% "spark-bigquery" % "0.2.6" 在 scala 的一个笔记本中设置

import com.samelamin.spark.bigquery._

// Set up GCP credentials
sqlContext.setGcpJsonKeyFile("<JSON_KEY_FILE>")

// Set up BigQuery project and bucket
sqlContext.setBigQueryProjectId("<BILLING_PROJECT>")
sqlContext.setBigQueryGcsBucket("<GCS_BUCKET>")

我们能够通过 python 与其他笔记本正确连​​接到谷歌

于 2021-11-01T06:41:49.800 回答
0

您需要处理您的配置。从您提供的图片来看,您的服务帐户电子邮件和服务帐户密钥似乎不正确。请确保您在 IAM 上使用具有Cloud Storage 管理员角色的正确服务帐户电子邮件,例如:

serviceaccount@project-id.iam.gserviceaccount.com

并且您的服务帐户密钥的路径应该是您的配置可以看到的目录,“json 路径”应该是您的密钥当前所在的目录。

此外,请确保您使用的是项目中存在的存储桶,否则您将收到“存储桶不存在”或“访问被拒绝”等错误。

更新

OP 更新了问题,请参阅此链接。可能GOOGLE_APPLICATION_CREDENTIALS指向错误的位置,或者可能没有正确的 IAM 权限。

于 2020-12-17T05:31:26.990 回答