Google Cloud Storage Объединение нескольких файлов CSV - PullRequest
3 голосов
/ 12 марта 2019

Я экспортировал набор данных из Google BigQuery в Google Cloud Storage, учитывая размер файла. BigQuery экспортировал файл в виде файлов 99 csv.

Однако теперь я хочу подключиться к своему GCP Bucket и выполнить некоторый анализс помощью Spark все же мне нужно объединить все 99 файлов в один большой CSV-файл для проведения анализа.

Как этого достичь?

1 Ответ

4 голосов
/ 12 марта 2019

BigQuery разделяет экспортируемые данные на несколько файлов, если они больше 1 ГБ .Но вы можете объединить эти файлы с помощью gsutil tool , отметьте в этой официальной документации , чтобы узнать, как выполнять компоновку объектов с помощью gsutil.

Поскольку BigQuery экспортирует файлы с помощьютот же префикс, вы можете использовать подстановочный знак *, чтобы объединить их в один составной объект:

gsutil compose gs://example-bucket/component-obj-* gs://example-bucket/composite-object

Обратите внимание, что существует ограничение (в настоящее время 32) на количество компонентов, которыеможет быть составлен в одной операции.

Недостатком этой опции является то, что строка заголовка каждого файла .csv будет добавлена ​​в составной объект.Но вы можете избежать этого, изменив jobConfig, чтобы установить print_header параметр на False.

Вот пример кода Python, но вы можете использовать любую другую клиентскую библиотеку BigQuery :

from google.cloud import bigquery
client = bigquery.Client()
bucket_name = 'yourBucket'

project = 'bigquery-public-data'
dataset_id = 'libraries_io'
table_id = 'dependencies'

destination_uri = 'gs://{}/{}'.format(bucket_name, 'file-*.csv')
dataset_ref = client.dataset(dataset_id, project=project)
table_ref = dataset_ref.table(table_id)

job_config = bigquery.job.ExtractJobConfig(print_header=False)

extract_job = client.extract_table(
    table_ref,
    destination_uri,
    # Location must match that of the source table.
    location='US',
    job_config=job_config)  # API request

extract_job.result()  # Waits for job to complete.

print('Exported {}:{}.{} to {}'.format(
    project, dataset_id, table_id, destination_uri))

Наконец, не забудьте составить пустой .csv с помощью всего лишьстрока заголовков.

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