Каков предел размера входного файла json в jq? - PullRequest
0 голосов
/ 20 апреля 2020

Существует ли максимальный json размер файла, который обрабатывает jq. Я собираю jq 1.6 из исходного кода github.

Я попытался обработать файл размером 288 МБ json (в следующей команде handwriting_data_info1. json) и получил следующие ошибки:

$ jq 'INDEX(.images[]; .id) as $imgs | { "filename_with_label" :
                [ .annotations[] |
                 select(.attributes.type=="letter" ) |
                 $imgs[.image_id] + {label:.text} |
                {id:.id} + {filename:.file_name} + {label:.label}
                ]
                }' handwriting_data_info1.json > handwriting_data_info1_with_label.json

jq: src/jv.c:1261: jvp_object_get_slot: Assertion `slot == -1 || (slot >= 0 && slot < jvp_object_size(object))' failed.
Aborted (core dumped)

К вашему сведению, приведенное выше определение фильтра jq хорошо работает для относительно небольших файлов размером json.

Я думаю, что будет максимальный входной json размер файла для JQ. Если это так, есть ли способ увеличить размер входного файла json для jq?

Спасибо за чтение.

1 Ответ

1 голос
/ 20 апреля 2020
  1. jq может обрабатывать произвольно длинные потоки JSON, при условии, что каждый отдельный элемент JSON в потоке помещается в память.

  2. Для JSON объекты, которые слишком велики для размещения в памяти, jq предоставляет так называемый «потоковый анализатор», который экономичен с памятью, но может быть заметно медленным и несколько сложным в использовании. Потоковый парсер включен с параметром командной строки --stream; дополнительную информацию о потоковом парсере можно найти в руководстве по jq и в FAQ по jq.

  3. Один из способов проверить, может ли jq управлять входом, - запустить фильтр empty, например: :

    jq пусто INPUT. json

  4. Опубликованная ошибка является ошибкой подтверждения; такие ошибки обычно не связаны с размером входного объекта или объектов. Такие ошибки, однако, могут быть сгенерированы, если программа jq пытается создать большие структуры, которые не помещаются в память. Я знаю о любых других ограничениях, наложенных на размер JSON входных данных, и я видел, как jq обрабатывал одиночные JSON сущности по несколько гигабайт каждая.

...