首页 > 解决方案 > 如何从字节偏移中读取 gzip jsonl 以调试 BigQuery 错误?

问题描述

我正在将 json 换行文件导出到 BigQuery 中,BigQuery 错误给了我原始 gziped jsonl 文件的字节偏移量,例如

JSON parsing error in row starting at position 727720: Repeated field must be imported as a JSON array. Field: named_entities.alt_form."

我曾尝试使用 Python 包索引 gzip从偏移量中读取,但索引 gzip 可悲地破坏了这些行。我还尝试使用内置的 python gzip 包来尝试获取相关行,但未成功:

import gzip
import ujson as json

f = open('myfile.json.gz', 'rb')
g = gzip.GzipFile(fileobj=f)
fasz = g.read()
byte_offset_to_line = {}
for line in g:
    byte_offset = f.tell()
    byte_offset_to_line[byte_offset] = line


target = 727720
ls = sorted([(abs(target-k),k) for k in byte_offset_to_line.keys() if k < target])

line_of_interest = byte_offset_to_line[ls[0]]
text = str(line_of_interest)

malformed_json = json.loads(text[2:-3])

通过上面的代码片段,我可以获得最近行的字节偏移量。但是当我尝试将该行上传到 BQ 的测试表时,它的工作很糟糕,所以我认为我没有得到正确的行。

我想知道是否有更好的方法来解决这个问题?老实说,我不确定为什么我上面的代码片段不起作用。

标签: jsonpython-3.xgoogle-bigquerygzip

解决方案


推荐阅读