我知道我应该有一个代码,但是我什么都没有。
我的GCS gs://path/listings_all.json
上有〜300GB JSON 文件,最终我试图将其导入到BigQuery中,但是它的数据结构有误(我是通过{{1 }}(来自MongoDB)
无效的字段名称“ $ date”。字段必须包含 仅字母,数字和下划线,以字母或 下划线,并且最长为128个字符
因此,现在我的方法是以某种方式从GCS逐行读取源文件,并使用python API将每个处理的行上载到BigQuery。
在简单的阅读器下面,我整理了原始原始文件中的100行样本进行测试:
mongoexport
请问我如何使用Python3从Google Cloud Storage逐行读取或流式传输巨大的JSON?
答案 0 :(得分:3)
逐行读取它,然后尝试流式传输到BigQuery将无法在本地计算机上扩展300GB,并且您将很难获得可用的TBH。
有两个可扩展的选项:
答案 1 :(得分:2)
smart_open现在支持流式传输GCS文件。
{{1}}
答案 2 :(得分:1)
使用内置的json解析器逐行解析json文件是行不通的(当然,除非它实际上是"json lines"文档),所以您需要使用streaming parser。
但是虽然这将解决内存使用问题,但不会修复无效的json,因此最好的选择是首先将无效的json源修复为纯文本文件,无论是使用python还是使用sed
或其他类似工具,然后使用增量解析器来解析您的内容。
def fixfile(sourcepath, destpath):
with open(sourcepath) as source, open(destpath, "w") as dest:
for line in source:
# you may want to use a regexp if this simple solution
# breaks something else
line = line.replace("$date", "date")
dest.write(line)
答案 3 :(得分:1)
这是GCP数据流中与accepted answer中的第一个建议相对应的解决方案的示例实现。您需要在功能 json_processor 中实现json校正。您可以在Datalab笔记本中运行此代码。
setDeveloperKey(developerKey)