首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加速RData负载

加速RData负载
EN

Stack Overflow用户
提问于 2012-07-19 11:12:42
回答 3查看 13.2K关注 0票数 32

我检查了几个相关的问题,这是吗?

How to load data quickly into R?

我引用了最有价值的答案的具体部分

这取决于您想要做什么以及如何进一步处理数据。在任何情况下,如果您总是需要相同的数据集,从二进制R对象加载总是会更快。这里的限制速度是硬盘的速度,而不是R。二进制表单是工作区中数据的内部表示,因此不再需要转换。

我真的这么想。然而,生活是关于实验的。我有一个1.22 GB的文件,其中包含一个igraph对象。也就是说,我在这里发现的内容与object类无关,主要是因为您可以在调用“库”之前加载(‘file.RData’)。

这台服务器上的磁盘很酷。,因为您可以将读取时间签入内存。

代码语言:javascript
复制
user@machine data$ pv mygraph.RData > /dev/null
1.22GB 0:00:03 [ 384MB/s] [==================================>] 100% `

但是,当我从R加载这些数据时

代码语言:javascript
复制
>system.time(load('mygraph.RData'))
   user  system   elapsed 
178.533  16.490   202.662

因此,加载*.RData文件的速度似乎比磁盘限制慢了60倍,这意味着R实际上是在“加载”时做了一些

我有同样的感觉,使用不同的R版本不同的硬件,只是这一次,我有耐心做基准(主要是因为这样一个很酷的磁盘存储,这是可怕的加载时间实际花费)

关于如何克服这个问题,有什么想法吗?

答案中的想法之后

代码语言:javascript
复制
save(g,file="test.RData",compress=F)

现在,这个文件是3.1GB,而之前是1.22GB。在我的例子中,加载解压缩要快一些(磁盘到目前为止还不是我的瓶颈)

代码语言:javascript
复制
> system.time(load('test.RData'))
user  system elapsed 
126.254   2.701 128.974 

将未压缩的文件读取到内存需要大约12秒,因此我确认大部分时间用于设置环境。

我会带着RDS的结果回来,听起来很有趣

我们到了,正如预言的那样

代码语言:javascript
复制
system.time(saveRDS(g,file="test2.RData",compress=F))
user  system elapsed 
7.714   2.820  18.112 

我得到一个3.1GB,就像“保存”未压缩,尽管md5sum是不同的,可能是因为save也存储对象名称

现在读..。

代码语言:javascript
复制
> system.time(a<-readRDS('test2.RData'))
user  system elapsed 
41.902   2.166  44.077 

因此,合并这两种想法(解压缩和RDS)的速度要快5倍。谢谢你的贡献!

EN

回答 3

Stack Overflow用户

发布于 2012-07-19 11:40:02

默认情况下,save进行压缩,因此需要额外的时间来解压缩文件。然后,需要更长的时间才能将较大的文件加载到内存中。您的pv示例只是将压缩的数据复制到内存中,这对您没有多大用处。;-)

更新:

我测试了我的理论,这是不正确的(至少在我的Windows计算机上有3.3Ghz CPU和7200 CPU)。加载压缩文件更快(可能是因为它减少了磁盘I/O)。

额外的时间用于RestoreToEnv ( saveload.c)和/或R_Unserialize ( serialize.c)。因此,您可以通过更改这些文件来加快加载速度,或者使用saveRDS将对象单独保存在myGraph.RData中,然后以某种方式跨多个R进程使用loadRDS将数据加载到共享内存中.

票数 12
EN

Stack Overflow用户

发布于 2012-07-19 11:42:51

对于这么大的变量,我怀疑大部分时间都是在内部C代码(http://svn.r-project.org/R/trunk/src/main/saveload.c)中进行的。你可以做一些分析看看我是不是对的。( load函数中的所有R代码都是检查您的文件是否是非空的,并且没有损坏。

除了将变量读入内存之外,它们(以及其他事情)还需要存储在R环境中。

在加载变量中获得大幅度加速的唯一明显方法是以并行方式重写代码,以允许同时加载变量。这大概需要对R的内部结构进行实质性的重写,所以不要为这样的特性屏住呼吸。

票数 5
EN

Stack Overflow用户

发布于 2018-10-12 16:54:17

RData文件加载需要一段时间的主要原因是解压缩步骤是单线程的。

fastSave R包允许使用并行工具保存和恢复R会话:

https://github.com/barkasn/fastSave

但是它只在UNIX上工作(不过,您仍然可以在其他平台上打开文件)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11559628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档