Использование jqr с readr
Вот расшифровка, иллюстрирующая, как использовать jqr для чтения сжатого файла NDJSON (он же JSONL):
$ R --vanilla
> library(readr)
> library(jqr)
> read_lines("objects.json.gz") %>% jq('.a')
[
1,
2,
3
]
>
Использование read_file()
дает тот же результат,Поскольку эти функции должны разархивировать весь файл, требования к памяти будут существенными.
Чтение каждой сущности JSON отдельно
Поскольку файл представляет собой NDJSON, мы можем радикально уменьшить объем оперативной памяти, необходимый для чтенияв одном объекте JSON за один раз:
con = file("objects.json", "r");
while ( length(line <- readLines(con, n = 1)) > 0) {
print( line %>% jq('.a') );
}
jq
Возможно, существуют лучшие способы использования jqr, но если целью является эффективность как пространства, так и времени, то, возможно, лучше всегоиспользуйте версию командной строки jq.
Count
Если вам нужно заранее подсчитать количество строк в (разархивированном) файле, то для экономии памяти я бы, вероятно, использовал system2
и wc
, если возможно;в противном случае вы можете запустить фрагмент кода следующим образом:
n<-0;
con = file("objects.json", "r");
while (TRUE) {
readLines(con, n = 1);
if (length(line) == 0) { break; }
n <- n+1;
}