摘要:
1)如何在Jupyter笔记本(如AI笔记本)中将熊猫数据帧写入GCS(Google云存储)
2)在同一笔记本中,如何调用该对象以将其上传到Bigquery中的新数据集中
问题
我确实有一个足够大的对象,无法在本地下载它,然后将其写入GCS-> BQ。但是,该对象的大小不足以使用Apache-Beam进行处理。我用BQ魔术带进了笔记本。进行一些转换后,我想将一个对象发送回我的数据存储库。因此,我试图使用AVRO进行复制,但是我不知道如何使它工作。我已尝试遵循本指南(https://github.com/ynqa/pandavro),但尚未弄清楚应如何编写该功能。
我正在这样做:
OUTPUT_PATH='{}/resumen2008a2019.avro'.format('gcs://xxxx')
pdx.to_avro(OUTPUT_PATH,df4)
这将返回以下错误:FileNotFoundError:[Errno 2]没有这样的文件或目录:'gcs:// xxxx'
为什么不镶木地板? 无法将数据正确地转换为JSON:ArrowInvalid :(“无法转换为类型str:试图转换为双精度型”,“对于类型对象的列salario转换失败”)
为什么不直接? 我尝试将这篇文章用作指导(Write a Pandas DataFrame to Google Cloud Storage or BigQuery)。但是它已经三岁了,许多东西不再像那样工作了。
我应该投降,只写一部经典的ol´ csv吗?
答案 0 :(得分:3)
非常支持直接将DataFrame写入BigQuery,并且工作顺利。
假设您使用的是Google Cloud AI Platform笔记本(因此我们不需要设置服务帐户和安装bq软件包),则可以执行以下操作以将Dataframe写入BQ表:
client = bigquery.Client(location="US")
dataset_id = 'your_new_dataset'
dataset = client.create_dataset(dataset_id)
records = [
{"title": "The Meaning of Life", "release_year": 1983},
{"title": "Monty Python and the Holy Grail", "release_year": 1975},
{"title": "Life of Brian", "release_year": 1979},
{"title": "And Now for Something Completely Different", "release_year": 1971},
]
# Optionally set explicit indices.
# If indices are not specified, a column will be created for the default
# indices created by pandas.
index = ["Q24980", "Q25043", "Q24953", "Q16403"]
df = pandas.DataFrame(records, index=pandas.Index(index, name="wikidata_id"))
table_ref = dataset.table("monty_python")
job = client.load_table_from_dataframe(df, table_ref, location="US")
job.result() # Waits for table load to complete.
print("Loaded dataframe to {}".format(table_ref.path))
如果确实要使用Pandavro,则将需要修改输出路径“ gs://”,因为它不是本地路径,并且只能写入文件系统的工具无法理解。您基本上必须将其分为以下步骤: