R jsonlite фильтрует записи перед загрузкой

У меня есть много больших файлов json (каждый по 3G), которые я хочу эффективно загрузить на сильную машину RServer, однако загрузка всех записей из всех файлов будет избыточной и изнурительной (50M записей умножаются на 40). Поэтому я подумал об использовании пакета jsonlite, потому что слышал, что это эффективно. Дело в том, что мне нужны не все записи, а только подмножество записей, в которых встроенный элемент ("источник") имеет существующее поле с именем "длительность". В настоящее время это мой код:

library(jsonlite)
library(curl)
url <- "https://s3-eu-west-1.amazonaws.com/es-export-data/logstash-2016.02.15.json"
test <- stream_in(url(url))

это только 1 экстракт из многих. теперь пакет jsonlite имеет функцию "сглаживания", чтобы сглаживать встроенные элементы, чтобы создать 1 широкий фрейм данных. Тогда я мог бы отфильтровать это. Однако это кажется неэффективным. Я думаю, что предварительная фильтрация при загрузке данных намного эффективнее. здесь дпут одной записи:

> dput(test_data)
"{\"_index\":\"logstash-2016.02.15\",\"_type\":\"productLogs\",\"_id\":\"AVLitaOtp4oNFTVKv9tZ\",\"_score\":0,\"_source\":{\"EntryType\":\"Event\",\"queryType\":\"clientQuery\",\"status\":\"success\",\"cubeName\":\"Hourly Targets Operations by Model\",\"cubeID\":\"aHourlyIAAaTargetsIAAaOperationsIAAabyIAAaModel\",\"startQueryTimeStamp\":\"2016-02-15T02:14:23+00:00\",\"endQueryTimeStamp\":\"2016-02-15T02:14:23+00:00\",\"queryResponeLengthBytes\":0,\"duration\":0,\"concurrentQuery\":14,\"action\":\"finishQueryJaql\",\"@timestamp\":\"2016-02-15T02:14:23.253Z\",\"appTypeName\":\"dataserver\",\"@version\":\"1\",\"host\":\"VDED12270\",\"type\":\"productLogs\",\"tags\":[],\"send_type\":\"PullGen1\",\"sisenseuid\":\"janos.kopecek@regenersis.com\",\"sisenseOwnerid\":\"janos.kopecek@regenersis.com\",\"sisenseVersion\":\" 5.8.1.29\",\"sisenseMonitoringVersion\":\"3.0.0.6\",\"inputType\":\"sqs\",\"token\":\"fTdyoSwaFZTalBlnFIlTsqvvzfKZVGle\",\"logstash_host\":\"vpc_cluster_1\"}}"
> 

любая помощь приветствуется

1 ответ

Вы должны добавить функцию-обработчик и указать, какие элементы вам нужны:

stream_in(url(url) , handler = function(x) x$"_source$duration")
Другие вопросы по тегам