将大型数据集加载到R中的最快方式和最快格式是什么

时间:2015-08-07 21:57:28

标签: r data.table fread read.table

我有一个大型数据集(大约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)。

1 个答案:

答案 0 :(得分:4)

这取决于您计划处理数据的方式。如果你想要内存中的整个数据用于某些操作,那么我猜你最好的选择是fread或readRDS(如果对你重要的话,RDS中保存的数据的文件大小要小得多)。

如果您要对数据进行汇总操作,我发现一次转换到数据库(使用sqldf)是一个更好的选择,因为后续操作通过对数据执行sql查询要快得多,但这也是因为我没有足够的RAM来加载内存中的13 GB文件。