我们正在运行托管在私有数据中心上的Spark,并试图从GCP存储读取数据。我使用下面的代码片段读取.csv
.
val sparkConf = new SparkConf
sparkConf.setAppName("gcp-storage-reader")
sparkConf.setMaster("local[*]")
sparkConf.set("google.cloud.auth.service.account.json.keyfile", "<json key file>")
val sparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
sparkSession
.read
.csv("gs://input/test.csv")
.show(2)
是否有传递.json
密钥内容,而不是路径到私钥json。例如,我们可以通过设置spark.conf.set("credentials", "<SERVICE_ACCOUNT_JSON_IN_BASE64>")
来访问BigQuery。我们可以做同样的从GCP存储读取数据吗?
我找到了答案,我们可以通过在sparkConf
bean中设置以下配置来进行服务帐户认证,
sparkConf.set("fs.gs.auth.service.account.private.key.id", "<privateKeyId>")
sparkConf.set("fs.gs.auth.service.account.private.key", "<privateKey>")
sparkConf.set("fs.gs.auth.service.account.email", "<clientEmail>")
这样我们就可以避免传递私有JSON密钥文件路径,直接传递密钥信息。