【发布时间】:2015-10-31 11:01:21
【问题描述】:
我有一个大数据集(大约 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 的建议也没有帮助,因为需要整个数据集,而不仅仅是其中的一个子集。
还有关于一次加载数据的最快方式的相关问题(例如:1)。
【问题讨论】:
-
您希望人们在不提供任何数据的情况下如何回答?我真的不明白这个问题的意义,因为您似乎已经发现了快速方法。
-
我是反对的选民之一,我非常接近将其作为副本关闭,因为我真的很难看到这个问题会得到哪些信息,而这个问题尚未完全涵盖其他地方。
-
好吧,我扣动了扳机。如果您不同意,请在 cmets 中提出您的意见,也许我会被否决。
-
@joran 我无法解释为什么 fread 比 loadRDS 快的其他答案。这似乎与加载二进制格式总是比加载文本格式快的信念不一致。如果我只问这个问题会有帮助吗?
-
@joran 我目前没有意愿或热情对此提出异议,但重复的选择似乎很糟糕。选择的重复问题仅与阅读表格格式的文本数据有关。 [我在问题中链接的类似问题](stackoverflow.com/questions/4756989/…) 与我提出的问题更接近。
标签: r data.table fread read.table