[英]Write pandas dataframe (from CSV) to BigQuery in batch mode
[英]How to write Pandas Dataframe containing dictionary to Bigquery?
我有来自 API 的 json 数据,其中包含名为“offset”的页码和“items”,这是一个嵌套的 json,如下所示:
{
"data": {
"offset": 0,
"pageSize": 20,
"items": [
{
"id": "6biewd5a",
"title": "AAAAAAAAAAAAAA"
},
{
"id": "er45ggg",
"title": "BBBBBBBBBBBBBBBB"
}
]
}
}
我正在创建一个 dataframe 来写入 bigquery。 这是我的代码。
import requests
from requests.auth import HTTPBasicAuth
import json
from google.cloud import bigquery
import pandas
import pandas_gbq
URL='xxxxxxxxxxxxxxxxxxxx'
auth = HTTPBasicAuth('name', 'password')
r = requests.get(url=URL ,auth=auth)
# extracting data in json format
data = json.loads(json.dumps(r.json()))
# data = r.json()
print(type(data))
offset=str(data['data']['offset'])
json_data=data['data']['items']
type(json_data)
df = pandas.DataFrame(
{
'offset':offset,
'json_data':json_data
)
# df['json_data']=df['json_data'].astype('string')
client = bigquery.Client(project='ncau-data-newsquery-sit')
table_id = 'sdm_adpoint.testfapi1'
job_config = bigquery.LoadJobConfig(
schema=[
bigquery.SchemaField("offset", "STRING"),
bigquery.SchemaField("json_data", "STRING","REPEATED")
# ,index=[0]
],
autodetect=False
)
df.head()
pandas_gbq.to_gbq(df, table_id, project_id='ncau-data-newsquery-sit',if_exists='append')
我已经像下面这样制作了 dataframe: Dataframe
但是当我使用
pandas_gbq.to_gbq(df, table_id, project_id='ncau-data-newsquery-sit',if_exists='append')
它抛出以下错误:ArrowTypeError: Could not convert {'id': '6biewd5a',......
为了克服这个问题,我尝试了这个:
df['json_data']=df['json_data'].astype('string')
它的工作原理,但它将所有行合并为一个,并将每个字母写在单独的行中
我想把数据写成一行,同样的方式显示在 Pandas dataframe 中。
尝试使用写入 Bigquery
pandas_gbq.to_gbq(df, table_id, project_id='ncau-data-newsquery-sit',if_exists='append')
抛出错误
ArrowTypeError: Could not convert {'id': '6biewd5a',......
然后我试了
df['json_data']=df['json_data'].astype('string')
但是它将所有行合并为一个,并将每个字母写在单独的行中
我想把数据写成一行,同样的方式显示在 Pandas dataframe 中。
您的 json 架构与此处在谷歌云示例https://cloud.google.com/bigquery/docs/nested-repeated#example_schema中给出的架构非常相似
因此您必须对代码中的架构定义进行以下更改。
对于项目架构,您必须如下定义架构
bigquery.SchemaField(
"items",
"RECORD",
mode="REPEATED",
fields=[
bigquery.SchemaField("id", "STRING", mode="NULLABLE"),
bigquery.SchemaField("title", "STRING", mode="NULLABLE"),
],
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.