【发布时间】:2020-04-08 22:39:27
【问题描述】:
在使用 Cloud Function-Python 3.7 上传到 GCS 之前,我一直在尝试将我的 CSV 文件压缩为 .gz,但我的代码所做的只是添加了 .gz 扩展名,但并没有真正压缩文件,所以在最后,文件已损坏。你能告诉我如何解决这个问题吗?谢谢
这是我的代码的一部分
import gzip
def to_gcs(request):
job_config = bigquery.QueryJobConfig()
gcs_filename = 'filename_{}.csv'
bucket_name = 'bucket_gcs_name'
subfolder = 'subfolder_name'
client = bigquery.Client()
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
QUERY = "SELECT * FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` session, UNNEST(hits) AS hits"
query_job = client.query(
QUERY,
location='US',
job_config=job_config)
while not query_job.done():
time.sleep(1)
rows_df = query_job.result().to_dataframe()
storage_client = storage.Client()
storage_client.get_bucket(bucket_name).blob(subfolder+'/'+gcs_filename+'.gz').upload_from_string(rows_df.to_csv(sep='|',index=False,encoding='utf-8',compression='gzip'), content_type='application/octet-stream')
【问题讨论】:
-
您应该检查从 Pandas 收到的警告,请参阅 stackoverflow.com/a/44168817/1358308 和 github.com/pandas-dev/pandas/issues/22555
-
@SamMason 的第一条评论中投票最多的答案确实对我有用。 @Justine 这对你有用吗?
-
@Jose V,确实如此!
-
@JoseV 我有一个小提琴并添加了关于使用
tempfile模块的注释。upload_from_stringmethod 也会立即创建一个BytesIO对象,因此如果可能的话,最好传递一个文件对象,这现在很简单
标签: python google-cloud-functions google-cloud-storage