R jsonlite 在加载前过滤记录

Posted

技术标签:

【中文标题】R jsonlite 在加载前过滤记录【英文标题】:R jsonlite filter records before loading 【发布时间】:2016-03-24 08:49:41 【问题描述】:

我有许多大型 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\""
> 

任何帮助表示赞赏

【问题讨论】:

【参考方案1】:

您必须添加一个处理函数并指定您需要哪些元素:

stream_in(url(url) , handler = function(x) x$"_source$duration")

【讨论】:

处理程序可以同时做行子集和列子集吗?如果是的话,你建议怎么做?

以上是关于R jsonlite 在加载前过滤记录的主要内容,如果未能解决你的问题,请参考以下文章

r JSON到CSV转换器。使用`jsonlite` R包,展平所有层次结构并将所有剩余的列表/数组转换为strin

用angularjs绑定repeat出来的图片怎么实现在加载完成前显示一张正在加载的占位图?

Netsuite - 加载前的 Suitescript 用户事件 - 获取子列表值加入 -> 设置子列表值自定义子记录

aws Glue / Redshift 的预过滤解决方案(在加载到 S3 之前)

将 20 GB csv 文件加载到 R 中的最佳方法是啥?

在 history.push 反应之后如何停止重新加载整个组件