【问题标题】:What is the fastest way and fastest format for loading large data sets into R [duplicate]将大型数据集加载到 R 中的最快方法和最快格式是什么 [重复]
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 使用 saveRDS 文件大小较小的部分原因是因为使用了压缩,这会降低性能;尽管更有效地表示因素和字符也可能有所帮助。
猜你喜欢
  • 2021-11-12
  • 1970-01-01
  • 2011-06-16
  • 2016-01-28
  • 2020-01-05
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
相关资源
最近更新 更多