Я экспортирую 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 indexed 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, она работает печально, поэтому я думаю, что получаю неправильную строку.
Мне было интересно, есть ли лучший подход для решения этой проблемы? Я не уверен, почему мой приведенный выше фрагмент не работает, если честно.