Есть ли лучший способ загрузить искровой df в BigQuery через кластер PySpark (dataporc)?

В настоящее время я использую приведенный ниже код для загрузки данных в BigQuery через кластер PySpark (dataproc), но либо обработка занимает слишком много времени, либо завершается с ошибкой превышения времени выполнения. Есть ли лучший и более быстрый способ загрузить искру df в BigQuery?

output.write \
      .format("bigquery") \
      .option("table","{}.{}".format(bq_dataset, bq_table)) \
      .option("temporaryGcsBucket", gcs_bucket) \
      .mode('append') \
      .save()

Ниже представлена ​​моя конфигурация кластера dataproc:

Master node : Standard (1 master, N workers)
Machine type : n1-standard-4
Number of GPUs : 0
Primary disk type : pd-standard
Primary disk size : 500GB
Worker nodes : 3
Machine type : n1-standard-4
Number of GPUs : 0
Primary disk type : pd-standard
Primary disk size : 500GB
Image version : 1.4.30-ubuntu18

comment
Каков размер данных? Каков размер кластера - сколько исполнителей, процессоров, памяти?   -  person David Rabinowitz    schedule 10.06.2020
comment
df.count() или df.show() выполняется неограниченное время и не выполняется, не знаю почему, но я предполагаю, что это не должно быть 200-300 строк, и я добавил конфигурацию кластера как часть вопроса.   -  person Tracy    schedule 11.06.2020


Ответы (1)


Убедитесь, что вы используете последнюю версию SparkBigQueryConnector.

Попробуйте протестировать свой код с другими промежуточными форматами, такими как avro, orc и parquet. Avro имеет тенденцию работать лучше с большими данными.

Если объем данных, которые вы пишете, действительно огромен, попробуйте добавить больше воркеров или выбрать другой тип машины.

person Gaurangi Saxena    schedule 10.06.2020