Google Cloud Storage加入多个csv文件

时间:2019-03-12 04:50:12

标签: google-bigquery google-cloud-storage

鉴于BigQuery将文件导出为99个CSV文件的大小,我将数据集从Google BigQuery导出到了Google Cloud Storage。

但是现在我想连接到我的GCP存储桶并使用Spark执行一些分析,但是我需要将所有99个文件合并到一个大的csv文件中以运行分析。

如何实现?

1 个答案:

答案 0 :(得分:4)

如果BigQuery是larger than 1GB,BigQuery会将导出的数据拆分为多个文件。但是您可以将这些文件与gsutil tool合并,选中this official documentation以了解如何使用gsutil执行对象组合。

随着BigQuery导出具有相同前缀的文件,您可以使用通配符*将它们合并为一个复合对象:

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

请注意,单个操作中可以组成的组件数有一个限制(当前为32个)。

此选项的缺点是每个.csv文件的标题行都将添加到复合对象中。但是您可以通过修改jobConfig来将print_header parameter设置为False来避免这种情况。

这是Python示例代码,但是您可以使用any other BigQuery Client library

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