我有一个很大的数据集(未压缩时大约 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 https://stackoverflow.com/questions/4756989/how-to-load-data-quickly-into-r问题是相关的,但并不反映 R 的当前状态,例如答案表明从二进制格式读取总是比文本格式更快。使用 *SQL 的建议对我来说也没有帮助,因为需要整个数据集,而不仅仅是其中的一个子集。
还有关于一次加载数据最快方式的相关问题(例如:1 https://stackoverflow.com/questions/1727772/quickly-reading-very-large-tables-as-dataframes-in-r).
这取决于您计划如何处理数据。如果您希望将整个数据存储在内存中进行某些操作,那么我想您最好的选择是 fread 或 readRDS(如果这对您很重要,则保存在 RDS 中的数据的文件大小要小得多)。
如果您要对数据进行汇总操作,我发现一次性转换为数据库(使用 sqldf)是一个更好的选择,因为通过对数据执行 sql 查询,后续操作会更快,但这也是因为我不这样做没有足够的 RAM 来加载内存中的 13 GB 文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)