我有一个 33GB 的 NDJSON 文件,需要读入 R 中的 data.table。它被压缩成 2GB 的文件,理想情况下我希望将其压缩。
结构并不那么重要,除了(通过 导入时jsonlite::stream_in
),我需要的数据仅在几个简单的列中。数据的绝大部分权重都保存在list
我想尽快丢弃的三列内的 s 中。
我的两个挑战是:如何并行化读入,以及如何限制内存使用(现在我在这个文件上的工作人员正在使用 175GB 内存)?
我现在在做什么:
dt.x <- data.table(flatten(stream_in(gzfile("source.gz"))[, -c(5:7)]))
想法:
也许有一些方法可以忽略 NDJSON 的一部分stream_in
?
我可以在gzfile
连接之前解析连接,例如使用正则表达式,stream_in
以删除多余的数据吗?
我可以readLines
在gzfile
连接上执行类似操作以读取每个工作人员 100 万行的数据吗?
编辑:如果可能的话,我的目标是让其他用户可以移植并完全保留在 R 中。