我收到带有要在 R 中分析的数据的 json 文件,为此我使用 RJSONIO 包:
library(RJSONIO)
filename <- "Indata.json"
jFile <- fromJSON(filename)
当 json 文件大于大约 300MB(未压缩)时,我的计算机开始使用交换内存并继续解析(fromJSON)几个小时。解析一个 200MB 的文件只需大约一分钟。
我在 Ubuntu 64 位和 16GB RAM 上使用 R 2.14(64 位),所以我很惊讶在大约 300MB 的 json 中已经需要交换。
我可以做些什么来读取大的 json?内存设置中有什么东西把事情搞砸了吗?我已经重新启动了 R 并且只运行了上面的三行。 json 文件包含 2-3 列短字符串和 10-20 列数字从 0 到 1000000。即它是大尺寸的行数(解析数据中超过一百万行)。
更新:从评论中我了解到 rjson 在 C 中做得更多,所以我尝试了一下。一个 300MB 的文件,使用 RJSONIO(根据 Ubuntu 系统监视器)达到 100% 的内存使用(从 6% 基线)并继续交换,使用包 rjson 只需要 60% 的内存,并且解析在合理的时间(分钟)内完成。
最佳答案
虽然您的问题没有具体说明这一细节,但您可能希望确保将整个 JSON 加载到内存中确实是您想要的。看起来 RJSONIO 是一个基于 DOM 的 API。
你需要做什么计算?你可以使用流解析器吗? yajl 是用于 JSON 的类似 SAX 的流解析器的示例。 .
关于c++ - 如何读取大 json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8216743/