Как прочитать gzip jsonl из байтового смещения, чтобы отладить ошибку BigQuery? - PullRequest
0 голосов
/ 08 апреля 2020

Я экспортирую 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, она работает печально, поэтому я думаю, что получаю неправильную строку.

Мне было интересно, есть ли лучший подход для решения этой проблемы? Я не уверен, почему мой приведенный выше фрагмент не работает, если честно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...