【问题标题】:BigQuery 'INTERNAL: request failed: internal error' when retrieving __TABLES__ from PySpark从 PySpark 检索 __TABLES__ 时 BigQuery 'INTERNAL: request failed: internal error'
【发布时间】:2021-09-10 16:40:41
【问题描述】:

我正在尝试从 PySpark 查询 BigQuery 中的 __TABLES__ 数据。我正在使用这段代码来查询系统表:

from pyspark.sql import SparkSession


spark = SparkSession.builder\
    .config('parentProject', 'my-parent-project')\
    .config('spark.jars.packages', 'com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.18.1')\
    .getOrCreate()

spark.read.format('bigquery')\
            .option("credentials", my_key)\
            .option("project", 'my-parent-project') \
            .option('table', 'my-dataset.__TABLES__') \
            .load()

它一直工作到 2021 年 6 月 25 日。第二天突然因为这个代码我开始收到这个错误消息:

: com.google.cloud.spark.bigquery.repackaged.com.google.api.gax.rpc.InternalException: com.google.cloud.spark.bigquery.repackaged.io.grpc.StatusRuntimeException: INTERNAL: request failed: internal error
at com.google.cloud.spark.bigquery.repackaged.com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:67)
at com.google.cloud.spark.bigquery.repackaged.com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:72)
at com.google.cloud.spark.bigquery.repackaged.com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:60)
at com.google.cloud.spark.bigquery.repackaged.com.google.api.gax.grpc.GrpcExceptionCallable$ExceptionTransformingFuture.onFailure(GrpcExceptionCallable.java:97)
at com.google.cloud.spark.bigquery.repackaged.com.google.api.core.ApiFutures$1.onFailure(ApiFutures.java:68)
at com.google.cloud.spark.bigquery.repackaged.com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1074)
at com.google.cloud.spark.bigquery.repackaged.com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:30)
at com.google.cloud.spark.bigquery.repackaged.com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1213)
at com.google.cloud.spark.bigquery.repackaged.com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:983)
at com.google.cloud.spark.bigquery.repackaged.com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:771)
at com.google.cloud.spark.bigquery.repackaged.io.grpc.stub.ClientCalls$GrpcFuture.setException(ClientCalls.java:563)
at com.google.cloud.spark.bigquery.repackaged.io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:533)
at com.google.cloud.spark.bigquery.repackaged.io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:413)
at com.google.cloud.spark.bigquery.repackaged.io.grpc.internal.ClientCallImpl.access$500(ClientCallImpl.java:66)
at com.google.cloud.spark.bigquery.repackaged.io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:742)
at com.google.cloud.spark.bigquery.repackaged.io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:721)
at com.google.cloud.spark.bigquery.repackaged.io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
at com.google.cloud.spark.bigquery.repackaged.io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Suppressed: com.google.cloud.spark.bigquery.repackaged.com.google.api.gax.rpc.AsyncTaskException: Asynchronous task failed

(堆栈跟踪比这更长,如果需要,我会发布其余部分)。

BigQuery 有什么变化吗?该错误消息对我进行故障排除不是很有帮助,有什么建议吗?要添加更多上下文,我可以使用相同的代码查询同一数据集中的其他表。

我在 Spark 3.0.1 和 BigQuery 连接器 com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.18.1 中观察到了这种行为。我在使用 Spark 2.4.3 和 BigQuery 连接器 com.google.cloud.spark:spark-bigquery-with-dependencies_2.11:0.18.1 时也遇到过同样的问题

【问题讨论】:

  • 火花版本? & bigquery 连接器版本?
  • @Srinivas 我在本地使用Spark 3.0.1 和连接器com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.18.1 进行测试。即使使用Spark 2.4.3com.google.cloud.spark:spark-bigquery-with-dependencies_2.11:0.18.1,我也会收到相同的错误消息
  • 是项目还是 parentProjectId ?
  • @Srinivas 我一直对 project 和 parentProject 使用相同的 ID(对不起,我是 BigQuery 的新手),它在查询其他表时也有效。但从 BigQuery 控制台看来,这就是项目名称。这有什么帮助吗?
  • @Srinivas 注意到 spark-bigquery-connector 使用 BigQuery Storage API,其语义与 bq 使用的常规 BigQuery API 不同

标签: apache-spark google-cloud-platform pyspark google-bigquery


【解决方案1】:

请注意,__TABLES__ 不是实际的 BigQuery 表,而是对其元数据的视图。解决此问题的一种方法是执行以下操作:

spark = SparkSession.builder\
    .config('parentProject', 'my-parent-project')\
    .config('viewsEnabled','true')\
    .config('materializationDataset', DATASET)
    .config('spark.jars.packages', 'com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.21.1')\
    .getOrCreate()

tables_df = spark.read.format('bigquery')\
            .option("credentials", my_key)\
            .load("SELECT * FROM my-project.my-dataset.__TABLES__")

【讨论】:

  • 如果滥用任何术语,请提前抱歉,我对 bq 比较陌生。我尝试添加viewsEnabled,materializationDataset(其中DATASET = my-dataset,如您的示例)和查询作为load()方法的参数,但不幸的是我仍然收到相同的错误消息。我正在测试Spark 3.0.1 和连接器com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.18.1 - 我没有投反对票!相反,我感谢你的努力(我也被否决了:P)
  • 您可以在 BigQuery 控制台上尝试此查询吗?另外,请分享新错误
  • 正如我在问题回复中向 Shrinivas 解释的那样,我能够从控制台和 bq CLI 查询视图。只有在 Spark 中查询并尝试显示结果时才会出现此问题。你也可以在你身边复制它吗?我用我正在使用的软件版本更新了我的问题。除了我收到的错误消息之外,即使有您的建议也是一样
  • spark 连接器使用 BigQuery Storage API 来读取数据,当涉及到 TABLES 等伪表时,它具有一些不同的语义。上面的代码 sn-p 对我有用 - 你能分享新的错误吗?您是否检查过用于访问 bigquery 的帐户是否具有正确的权限?
  • hmmm 也许我为 DATASET 传递了错误的值。鉴于您的示例,我应该使用my-dataset 对吗?
猜你喜欢
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 2018-01-17
  • 2021-09-07
  • 2012-03-27
  • 2023-03-30
  • 2022-01-07
  • 1970-01-01
相关资源
最近更新 更多