【发布时间】:2019-03-14 02:20:43
【问题描述】:
我知道我应该有一个代码,但我还没有任何有用的东西。
在我的 GCS gs://path/listings_all.json 上有 ~300GB JSON 文件,最终我试图将其导入 BigQuery,但它的数据结构有误(我是通过 mongoexport 从 MongoDB 获取的)
字段名称“$date”无效。字段必须包含 只有字母、数字和下划线,以字母或 下划线,最长 128 个字符
所以,现在我的方法是以某种方式从 GCS 进程中逐行读取源文件,并使用 python API 将每个处理后的行上传到 BigQuery。
在简单的阅读器下面,我用原始大文件中的 100 行样本进行了测试:
import json
from pprint import pprint
with open('schema_in_10.json') as f:
for line in f:
j_content = json.loads(line)
# print(j_content['id'], j_content['city'], j_content['country'], j_content['state'], j_content['country_code'], j_content['smart_location'], j_content['address'], j_content['market'], j_content['neighborhood'])
# // geo { lat, lng}'])
print('------')
pprint(j_content['is_location_exact'])
pprint(j_content['zipcode'])
pprint(j_content['name'])
您能否帮助我了解如何使用 Python3 从 Google Cloud Storage 逐行读取或流式传输巨大的 JSON?
【问题讨论】:
-
有增量 JSON 解析器,例如 pypi.org/project/ijson。这样,任何大小的 JSON 文件都可以读取,内存要求非常低。
-
至少在 BigQuery 的情况下,它需要 JSON Lines 格式,但我不知道它是如何存储在 GCS 中的。如果它已经是 JSON Lines 格式,那么您可以简单地迭代整个 300GB 文件而不将其加载到内存中。看起来你就是这种情况?
标签: python google-bigquery google-cloud-storage google-python-api