什么是将大型数据集快速加载到R中的最快方法和最快格式?

25 浏览
0 Comments

什么是将大型数据集快速加载到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

之前的问题

这个问题是相关的,但并不反映当前的R状态,例如,一个答案建议从二进制格式读取将始终比文本格式快。建议使用SQL对我来说也没有帮助,因为需要整个数据集,而不仅仅是其子集。

还有相关问题关于一次最快的加载数据的方式(例如:1)。

admin 更改状态以发布 2023年5月20日
0
0 Comments

这取决于您对数据的处理方式。如果需要在某些操作中将整个数据存储在内存中,那么我认为您最好使用fread或readRDS(如果您关注数据在内存中的大小,则在RDS中保存数据的文件大小要小得多)。

如果您将对数据执行摘要操作,则我发现将一次性转换为数据库(使用sqldf)是更好的选择,因为随后的操作通过对数据执行SQL查询更加快速,但这也是因为我没有足够的RAM将13 GB的文件加载到内存中。

0