我有一个20GB的CSV文件,我想在R中将其转换为RDS文件。但是,原始文件太大,无法处理(有64GB RAM的电脑告诉我需要分配80. 9GB,这超过了它的内存容量)。因此,我想知道,我是否以及如何能够以块的形式读取CSV,将每个数据块转换为单独的RDS文件,然后将它们合并在一起?这会产生与直接将CSV文件转换为RDS文件相同的结果吗?
我对R很陌生,不幸的是找不到我问题的任何答案。
下面是我目前使用的代码。
library(Matrix)
library(data.table)
b <- fread('dtm.csv')
b_matx<- as.matrix(b)
dtm_b <- Matrix(b_matx, sparse = TRUE)
saveRDS(dtm_b, "dtm.rds")
1条答案
按热度按时间gcuhipw91#
看看这是否有效。
它使用
fread
一次读取一列。默认情况下,fread
创建一个 Dataframe ;然而,这些使用外部指针,这可能是个问题,因此我们使用data.table=FALSE
参数。在阅读一列后,它立即将其作为RDS文件写回。在所有列都作为RDS文件写回后,它读取RDS文件,并将最终的RDS文件写回,该文件将它们组合在一起。我们使用末尾注解中的6行输入作为示例。如果带有
select=
的fread
仍然占用太多内存,请使用xsv实用程序(不是R程序)确保只读取感兴趣的列。可以为各种平台here下载xsv,然后使用注解掉的行而不是它后面的行。(出于相同目的,也可以适当地使用cut
、sed
或awk
。)您也可以尝试在代码行中穿插
gc()
来触发垃圾回收。同时尝试将最后一行中的
as.data.frame
替换为setDT
。注意