我收到带有要在R中分析的数据的json文件,为此我使用了RJSONIO-package:

library(RJSONIO)
filename <- "Indata.json"
jFile <- fromJSON(filename)

当json文件大于300MB(未压缩)时,我的计算机开始使用交换内存,并继续进行解析(fromJSON)几个小时。一个200MB的文件只需花费大约一分钟即可解析。

我在具有16GB RAM的Ubuntu 64位上使用R 2.14(64位),因此令我感到惊讶的是,大约300MB的json已经需要交换。

我该怎么做才能读取大型json?内存设置中是否有些东西弄乱了?我已经重新启动R并仅运行上面的三行。 json文件包含2-3列短字符串,以及10-20列数字从0到1000000。是行的数量导致较大的大小(在解析的数据中超过一百万行)。

更新:从这些注释中,我了解到rjson在C语言中做了更多工作,因此我尝试了它。一个300MB的文件,使用RJSONIO(根据Ubuntu System Monitor)达到100%的内存使用(从6%的基准开始),然后继续进行交换,仅使用rjson软件包就需要60%的内存,并且在合理的时间(分钟)内完成了解析。

最佳答案

尽管您的问题未指定详细信息,但是您可能要确保将整个JSON加载到内存中实际上是您想要的。看起来RJSONIO是基于DOM的API。

您需要做什么计算?您可以使用流解析器吗? JSON的类似于SAX的流解析器的一个示例是yajl

10-05 18:19