鉴于 BigQuery 将文件导出为 99 个 csv 文件的文件大小,我将数据集从 Google BigQuery 导出到 Google Cloud Storage。
但是现在我想连接到我的 GCP Bucket 并使用 Spark 执行一些分析,但我需要将所有 99 个文件加入一个大的 csv 文件来运行我的分析。
如何做到这一点?
最佳答案
如果是 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
只有标题行。
关于google-bigquery - 谷歌云存储加入多个csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55114393/