apache-spark - 如何使用来自 Apache Spark (pyspark) 的 BigQuery 进行身份验证?
问题描述
我已经为我的 bigquery 项目创建了一个client id
和client 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。
解决方案
如何在 GCE / Dataproc 之外进行身份验证?
使用此处所述的服务帐户 JSON 密钥和 GOOGLE_APPLICATION_CREDENTIALS 。
凭据也可以作为参数或从 Spark 运行时配置显式提供。它可以直接作为 base64 编码的字符串传入,也可以作为包含凭据的文件路径传入(但不能同时传入)。
所以你应该使用这个:
spark.read.format("bigquery").option("credentialsFile", "</path/to/key/file>")
推荐阅读
- regex - prerender.io via prerender-node middleware, blacklist hashbang
- java - 如何使用 shell_exec() 函数从 php 页面执行 java 命令?
- c# - 如何在没有死锁的情况下正确读取 c# 进程标准错误流?
- python - Pandas single level multiindex vs plain index
- javascript - Retrieving data from database - undefined index problem (ajax related problem)
- javascript - 使用 Firebase 测试 create-react-app
- spring - How do I dynamically generate this table in the form?
- python - 有没有办法使用 pandas 进行合并,其中一列是列表,另一列可能包含该列表中的元素?
- clang - Clang RecursiveASTVisitor
- excel - 使用 Union() 提高格式化宏的速度