我有一个大型数据集(大约13GB未压缩),我需要重复加载它。第一次加载(并保存为不同的格式)可能非常慢,但此后的每次加载都应尽可能快。加载数据集的最快方式和最快格式是什么?
我怀疑最佳选择是
saveRDS(obj, file = 'bigdata.Rda', compress = FALSE)
obj <- loadRDS('bigdata.Rda)
但这似乎比在fread
包中使用data.table
函数要慢。这不应该是这种情况,因为fread
将文件从CSV转换(虽然它被认可地高度优化)。
~800MB数据集的一些时间是:
> system.time(tmp <- fread("data.csv"))
Read 6135344 rows and 22 (of 22) columns from 0.795 GB file in 00:00:43
user system elapsed
36.94 0.44 42.71
saveRDS(tmp, file = 'tmp.Rda'))
> system.time(tmp <- readRDS('tmp.Rda'))
user system elapsed
69.96 2.02 84.04
This问题是相关的,但并不反映R的当前状态,例如答案建议从二进制格式读取将始终比文本格式更快。在我的情况下使用* SQL的建议也没有用,因为需要整个数据集,而不仅仅是它的一个子集。
还有一些关于加载数据的最快方法的相关问题(例如:1)。
答案 0 :(得分:4)
这取决于您计划处理数据的方式。如果你想要内存中的整个数据用于某些操作,那么我猜你最好的选择是fread或readRDS(如果对你重要的话,RDS中保存的数据的文件大小要小得多)。
如果您要对数据进行汇总操作,我发现一次转换到数据库(使用sqldf)是一个更好的选择,因为后续操作通过对数据执行sql查询要快得多,但这也是因为我没有足够的RAM来加载内存中的13 GB文件。