通过Spark使用BigQuery Storage API:请求了多个分区,但只得到1个



我使用bigquery-spark-connector从BigQuer读取,后者使用bigquery Storage API。我的脚本(自动(从BigQuery Storage API请求多个分区,但我得到了警告:

WARN com.google.cloud.spark.bigquery.direct.DirectBigQueryRelation:请求了2个分区,但仅从bigquery Storage API 接收到1个分区

Spark工作需要很长时间,我认为这是因为它没有读取多个分区。如何确保BigQuery Storage API为我提供所需的所有分区?这里发生了什么,为什么不管我请求多少,它都只给我一个分区?

首先我创建一个SparkSession:

SparkSession spark = SparkSession.builder()
.appName("XXX")
.getOrCreate();

这是导致警告的代码:

Dataset<Row> data = spark.read()
.format("bigquery")
.option("table","project.dataset.table")
.load()
.cache();

当从bigquery存储API请求分区时,spark-bigquery-connector使用一些试探法进行询问。返回的分区是BigQuery使用的实际分区,可能低于启发式算法预测的分区。这是一个正常的情况,所以对于这种情况,警告可能有点太严重了(我也和BigQuery团队讨论过这个问题(。有关进一步的上下文,请阅读此处requestedStreams参数的描述。

第二个问题是Spark作业需要很长时间。如果增加资源,特别是执行器的数量没有帮助,请在spark-bigquery连接器项目中打开一个带有实际流id和spark配置其余部分的bug,以便连接器和BoigQuery团队能够检查它。

最新更新