我有很多大的json文件(每个3G),我想有效地加载到强大的RServer机器,但加载所有文件的所有记录将是多余的和耗尽(50M记录乘以40)。所以我想使用jsonlite包因为我听说它很有效。问题是我不需要所有记录,只需要记录的子集,其中嵌入元素(“源”)具有名称为“duration”的现有字段。 这是我目前的代码:
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))
它只是许多的一个提取物。现在,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\"}}"
>
任何帮助表示赞赏
答案 0 :(得分:0)
您必须添加处理函数并指定所需的元素:
stream_in(url(url) , handler = function(x) x$"_source$duration")