鉴于BigQuery将文件导出为99个CSV文件的大小,我将数据集从Google BigQuery导出到了Google Cloud Storage。
但是现在我想连接到我的GCP存储桶并使用Spark执行一些分析,但是我需要将所有99个文件合并到一个大的csv文件中以运行分析。
如何实现?
答案 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
。