Gio*_*toF 5 python pandas google-bigquery google-cloud-platform parquet
我正在尝试使用官方 python客户端库将相对较大的pandas数据帧加载df到 Google BigQuery 表中。table_refgoogle-cloud-bigquery
到目前为止,我已经尝试了两种不同的方法:
1)直接从内存中的数据帧加载表
client = bigquery.Client()
client.load_table_from_dataframe(df, table_ref)
Run Code Online (Sandbox Code Playgroud)
2) 将数据帧保存到 Google Cloud Storage 中 uri 的 parquet 文件中parquet_uri,并从该文件加载表:
df.to_parquet(parquet_uri)
client = bigquery.Client()
client.load_table_from_uri(parquet_uri, table_ref)
Run Code Online (Sandbox Code Playgroud)
两种方法都会导致相同的错误:
google.api_core.exceptions.BadRequest:400 查询执行期间超出资源:UDF 内存不足。;无法读取 Parquet 文件 [...]。如果文件包含太大的行,或者为查询列加载的页面的总大小太大,则可能会发生这种情况。
该数据框df有 3 列和 1.84 亿行。保存为 parquet 文件格式时,占用 1.64 GB。
有没有办法使用官方 python 客户端库将这样的数据帧上传到 BigQuery 表中?
先感谢您,
乔瓦尼
我能够将大型 df 上传到 BigQuery,方法是将其分成几个块并将每个块加载并附加到 BigQuery 中的表中,例如:
client = bigquery.Client()
for df_chunk in np.array_split(df, 5):
job_config = bigquery.LoadJobConfig()
job_config.write_disposition = bigquery.WriteDisposition.WRITE_APPEND
job = client.load_table_from_dataframe(df_chunk, table_id, job_config=job_config)
job.result()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5723 次 |
| 最近记录: |