首页 > 解决方案 > 如何使用来自 Apache Spark (pyspark) 的 BigQuery 进行身份验证?

问题描述

我已经为我的 bigquery 项目创建了一个client idclient secret,但我不知道如何使用它们将数据帧从 pyspark 脚本成功保存到我的 bigquery 表中。我下面的python代码导致以下错误。有没有办法可以使用 pyspark 数据框上的保存选项连接到 BigQuery?

代码

df.write \
  .format("bigquery") \
  .option("client_id", "<MY_CLIENT_ID>") \
  .option("client_secret", "<MY_CLIENT_SECRET>") \
  .option("project", "bigquery-project-id") \
  .option("table", "dataset.table") \
  .save()

错误

py4j.protocol.Py4JJavaError:调用 o93.save 时出错。: com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.BigQueryException: 400 错误请求 { "error": "invalid_grant", "error_description": "Bad Request" } 在 com.google.cloud .spark.bigquery.repackaged.com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.translate(HttpBigQueryRpc.java:106) 在 com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery。 spi.v2.HttpBigQueryRpc.getTable(HttpBigQueryRpc.java:268) 在 com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.BigQueryImpl$17.call(BigQueryImpl.java:664) 在 com.google .cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.BigQueryImpl$17.call(BigQueryImpl.java:661) 在 com.google.cloud.spark.bigquery。

标签: apache-sparkpysparkgoogle-bigquery

解决方案


spark-bigquery-connector

如何在 GCE / Dataproc 之外进行身份验证?

使用此处所述的服务帐户 JSON 密钥和 GOOGLE_APPLICATION_CREDENTIALS 。

凭据也可以作为参数或从 Spark 运行时配置显式提供。它可以直接作为 base64 编码的字符串传入,也可以作为包含凭据的文件路径传入(但不能同时传入)。

所以你应该使用这个:

spark.read.format("bigquery").option("credentialsFile", "</path/to/key/file>")

推荐阅读