Использование BigQuery Storage API через Spark: запрошено несколько разделов, но получить только 1 - PullRequest
2 голосов
/ 08 ноября 2019

Я использую bigquery-spark-connector для чтения из BigQuer, который использует BigQuery Storage API. Мой сценарий (автоматически) запрашивает несколько разделов из API хранилища BigQuery, но я получаю предупреждение:

WARN com.google.cloud.spark.bigquery.direct.DirectBigQueryRelation: Запрошено 2 раздела, но только 1 получено от BigQueryAPI хранилища

Работа Spark занимает очень много времени, и я думаю, что это потому, что она не читает через несколько разделов. Как я могу убедиться, что BigQuery Storage API дает мне все разделы, которые я запрашиваю? Что здесь происходит, почему он дает мне только один раздел, независимо от того, сколько я запрашиваю?

Сначала я создаю SparkSession:

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

Этот код вызывает WARN:

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

1 Ответ

0 голосов
/ 08 ноября 2019

В соединителе spark-bigquery используется некоторая эвристика, запрашиваемая при запросе разделов из API хранилища BigQuery. Возвращенные разделы - это фактические разделы, используемые BigQuery, которые могут быть ниже, чем предсказывает эвристика. Это нормальный случай, поэтому, возможно, предупреждение является слишком серьезным для этого случая (я обсуждал это также с командой BigQuery). Для дальнейшего контекста прочитайте описание параметра requiredStreams здесь .

Вторая проблема заключается в том, что задание Spark занимает очень много времени. Если увеличение ресурсов, особенно количество исполнителей, не помогает, пожалуйста, откройте ошибку в проекте spark-bigquery-connector с указанием фактического идентификатора потока и остальной конфигурации искры, чтобы соединитель иКоманды BoigQuery смогут проверить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...