【问题标题】:Reading large RDS files in R in a faster way以更快的方式在 R 中读取大型 RDS 文件
【发布时间】:2014-06-21 07:59:36
【问题描述】:

我有一个大的 RDS 文件要在 R 中读取。但是,读取该文件需要相当长的时间。

有没有办法加快阅读速度?我尝试了 data.table 库及其 fread 函数,但出现错误。

data <- readRDS("myData.rds")

data <- fread("myData.rds")  # error

【问题讨论】:

  • 我会尝试使用compress = FALSE 保存文件。它可以显着加快阅读和写作速度。
  • 当我尝试 saveRDS(data,compress = FALSE) 时,文件实际上比单独使用 saveRDS(data) 大 7 倍,并且使用 readDRS 加载的时间要长 6 倍。
  • 您的 RDS 文件中有哪些数据? RDS 是一种通用存储格式,因此它在所有方面都不是完美的。有更快的存储格式取决于您的数据,前提是您可以选择一种(如果 RDS 在您的工作流程中不是强制性的)

标签: r


【解决方案1】:

加快大文件读取操作的一种方法是以压缩模式读取它

system.time(read.table("bigdata.txt", sep=","))

user: 170.901
system: 1.996
elapsed: 192.137

现在尝试相同的读取,但使用压缩文件

system.time(read.table("bigdata-compressed.txt.gz", sep=","))

user: 65.511
system: 0.937
elapsed: 66.198

【讨论】:

  • 这是一个文本文件,而 OP 询问的是 RDS 文件。
  • @hshihab 您的解决方案是否也适用于RDS 文件??
【解决方案2】:

压缩也会影响 rds 文件的读取速度:

n<-1000
m<-matrix(runif(n^2), ncol=n)
default<-tempfile()
unComp<-tempfile()
saveRDS(m,default)
saveRDS(m, unComp,compress = F)
microbenchmark::microbenchmark(readRDS(default), readRDS(unComp))
#> Unit: milliseconds
#>              expr      min       lq     mean   median       uq      max neval
#>  readRDS(default) 46.37050 49.54836 56.03324 56.19446 59.99967 96.16305   100
#>   readRDS(unComp) 11.60771 13.16521 15.54902 14.01063 17.36194 27.35329   100
#>  cld
#>    b
#>   a
file.info(default)$size
#> [1] 5326357
file.info(unComp)$size
#> [1] 8000070
require(qs)
#> Loading required package: qs
#> qs v0.25.1.
qs<-tempfile()
qsave(m, qs)
microbenchmark::microbenchmark(qread(qs), readRDS(unComp))
#> Unit: milliseconds
#>             expr       min       lq     mean   median       uq      max neval
#>        qread(qs) 10.164793 12.26211 15.31887 14.71873 17.25536 27.08779   100
#>  readRDS(unComp)  9.342042 12.59317 15.63974 14.44625 17.93492 35.12563   100
#>  cld
#>    a
#>    a
file.info(qs)$size
#> [1] 4187017

但是,正如这里所见,它是以文件大小为代价的。也可能是存储速度有影响。在慢速存储(例如网络、旋转磁盘)上,使用压缩实际上可能会更好,因为从磁盘读取文件的速度更快。因此,它是工作实验。特定的软件包甚至可能会提供稍微更好的性能qs 具有相同的速度但更小的尺寸结合了两者的优点。对于特定的数据格式,其他包可能会更好,请参阅此概述:https://books.ropensci.org/drake/plans.html#special-data-formats-for-targets

【讨论】:

    猜你喜欢
    • 2018-07-12
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 2013-12-12
    • 1970-01-01
    • 2014-03-09
    相关资源
    最近更新 更多