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)。
这取决于您打算如何处理数据。如果您希望将整个数据保存在内存中进行某些操作,那么我猜您最好的选择是 fread 或 readRDS(如果这对您很重要,则保存在 RDS 中的数据的文件大小要小得多)。
如果您将对数据进行汇总操作,我发现一次转换为数据库(使用 sqldf)是一个更好的选择,因为通过对数据执行 sql 查询,后续操作要快得多,但这也是因为我不这样做没有足够的 RAM 在内存中加载 13 GB 的文件。