将大型数据集加载到 R 中的最快方法和最快格式是什么
What is the fastest way and fastest format for loading large data sets into R
我有一个很大的数据集(大约 13GB 未压缩),我需要反复加载它。第一次加载(并保存为不同的格式)可能非常慢,但此后的每次加载都应尽可能快。加载数据集的最快方式和最快格式是什么?
我怀疑最佳选择是这样的
saveRDS(obj, file = 'bigdata.Rda', compress = FALSE)
obj <- loadRDS('bigdata.Rda)
但这似乎比使用 data.table
包中的 fread
函数慢。这不应该是这种情况,因为 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 的建议对我的情况也没有帮助,因为需要整个数据集,而不仅仅是其中的一个子集。
还有相关问题,最快的一次加载数据的方式(eg:1)。
这取决于您打算如何处理数据。如果您希望内存中的整个数据用于某些操作,那么我想您最好的选择是 fread 或 readRDS(如果这对您很重要,则保存在 RDS 中的数据的文件大小要小得多)。
如果您要对数据进行汇总操作,我发现一次性转换为数据库(使用 sqldf)是一个更好的选择,因为通过执行 [=14,后续操作要快得多=] 查询数据,但这也是因为我没有足够的内存来加载内存中的 13 GB 文件。
我有一个很大的数据集(大约 13GB 未压缩),我需要反复加载它。第一次加载(并保存为不同的格式)可能非常慢,但此后的每次加载都应尽可能快。加载数据集的最快方式和最快格式是什么?
我怀疑最佳选择是这样的
saveRDS(obj, file = 'bigdata.Rda', compress = FALSE)
obj <- loadRDS('bigdata.Rda)
但这似乎比使用 data.table
包中的 fread
函数慢。这不应该是这种情况,因为 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 的建议对我的情况也没有帮助,因为需要整个数据集,而不仅仅是其中的一个子集。
还有相关问题,最快的一次加载数据的方式(eg:1)。
这取决于您打算如何处理数据。如果您希望内存中的整个数据用于某些操作,那么我想您最好的选择是 fread 或 readRDS(如果这对您很重要,则保存在 RDS 中的数据的文件大小要小得多)。
如果您要对数据进行汇总操作,我发现一次性转换为数据库(使用 sqldf)是一个更好的选择,因为通过执行 [=14,后续操作要快得多=] 查询数据,但这也是因为我没有足够的内存来加载内存中的 13 GB 文件。