Google Cloud Storage加入多个csv文件

EGM*_*686 4 google-cloud-storage google-bigquery

考虑到BigQuery导出的文件大小为99个csv文件,我将数据集从Google BigQuery导出到Google Cloud Storage。

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

如何做到这一点?

llo*_*les 6

如果BigQuery导出的数据大于1GB,则会将其拆分为多个文件。但是您可以将这些文件与gsutil工具合并,查看此官方文档以了解如何使用gsutil执行对象组合。

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

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

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

此选项的缺点是每个.csv文件的标题行都将添加到复合对象中。但是你可以通过modifiyng的避免这种情况jobConfig,设置print_header参数False

这是Python示例代码,但您可以使用任何其他BigQuery Client库

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))
Run Code Online (Sandbox Code Playgroud)

最后,请记住.csv只用标题行组成一个空白。