R压缩地将大数据帧保存到硬盘驱动器

时间:2017-06-10 20:22:52

标签: r csv compression gzip

我需要将R中的一些大dataframes保存到硬盘中。由于每个DF的尺寸非常大(〜> 50K行和> 50列)并且我有超过200K的尺寸,我想压缩保存它们以节省一些硬盘空间。

到目前为止,我尝试了几种类型,例如.CSVrdscompress = "gzip"),分别需要〜60MB20 MB。我想知道是否有一些替代方法可以更有效地压缩它们。

1 个答案:

答案 0 :(得分:4)

除非您的数据有一些非常特殊的结构,否则我认为您不能比saveRDS()做得更好。通过使用其中一种替代压缩选项,您可以获得轻微(~10%)的优势;下面,我使用xz压缩而不是gzip从12.7M变为10.5M(在我的示例中,CSV为43M)。

设置示例:

set.seed(101)
m <- matrix(runif(5e4*50),ncol=50)

(这是一个矩阵,而不是数据框:我怀疑它会有很大的不同,但你可以尝试。)

写CSV文件:

write.csv(m,file="tmp.csv")
s_csv <- file.info("tmp.csv")["size"]

尝试压缩选项:

c_opts <- c("gzip","bzip2","xz")
ss <- sapply(c_opts,
        function(c) {
          saveRDS(m,compress=c,file="tmp.rds")    
          return(file.info("tmp.rds")["size"])
})

合并,转换为MB:

unlist(c(csv=s_csv,ss))/2^20
##  csv.size  gzip.size bzip2.size    xz.size 
##   43.28464   12.69796   11.32605   10.46269