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

ori*_*zon 3 r fread read.table data.table

我有一个大数据集(大约 13GB 未压缩),我需要重复加载它。第一次加载(并保存为不同的格式)可能非常慢,但此后的每次加载都应尽可能快。加载数据集的最快方式和最快格式是什么?

我的怀疑是最佳选择是这样的

 saveRDS(obj, file = 'bigdata.Rda', compress = FALSE)
 obj <- loadRDS('bigdata.Rda)
Run Code Online (Sandbox Code Playgroud)

但这似乎比使用包中的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
Run Code Online (Sandbox Code Playgroud)

以前的问题

这个问题是相关的,但不反映 R 的当前状态,例如一个答案表明从二进制格式读取总是比文本格式快。使用 *SQL 的建议在我的情况下也没有帮助,因为需要整个数据集,而不仅仅是它的一个子集。

还有一些关于加载数据的最快方式的相关问题(例如:1)。

Roh*_*Das 5

这取决于您打算如何处理数据。如果您希望将整个数据保存在内存中进行某些操作,那么我猜您最好的选择是 fread 或 readRDS(如果这对您很重要,则保存在 RDS 中的数据的文件大小要小得多)。

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