【发布时间】:2021-12-06 21:06:52
【问题描述】:
我的要求是以特定的排序顺序将数据从 BQ 导出到 GCS,我无法使用自动导出来获得,因此尝试为此编写手动导出。 文件格式如下:
HDR001||5378473972abc||20101|182082||
DTL001||436282798101|
DTL002||QS
DTL005||3733|8
DTL002||QA
DTL005||3733|8
DTL002||QP
DTL005||3733|8
DTL001||436282798111|
DTL002||QS
DTL005||3133|2
DTL002||QA
DTL005||3133|8
DTL002||QP
DTL005||3133|0
我对此很陌生,能够将文件写入本地磁盘,但我不确定如何将其写入文件到 GCS。我尝试使用 write_to_file,但似乎遗漏了一些东西。
import pandas as pd
import pickle as pkl
import tempfile
from google.colab import auth
from google.cloud import bigquery, storage
#import cloudstorage as gcs auth.authenticate_user()
df = pd.DataFrame(data=job)
sc = storage.Client(project='temp-project')
with tempfile.NamedTemporaryFile(mode='w+b', buffering=- 1,prefix='test',suffix='temp') as fh:
with open(fh.name,'w+',newline='') as f:
dfAsString = df.to_string(header=" ", index=False)
fh.name = fh.write(dfAsString)
fh.close()
bucket = sc.get_bucket('my-bucket')
target_fn = 'test.csv'
source_fn = fh.name
destination_blob_name = bucket.blob('test.csv')
bucket.blob(destination_blob_name).upload_from_file(source_fn)
有人可以帮忙吗?
谢谢。
【问题讨论】:
-
您在尝试上传文本文件 (csv) 时正在使用
w+b模式。w+b用于二进制文件。请改用w+t。
标签: python google-bigquery google-cloud-storage