首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:如何将300个1 1GB的.rds文件组合成一个大的rds文件而不将它们读取到内存中?

问R:如何将300个1 1GB的.rds文件组合成一个大的rds文件而不将它们读取到内存中?
EN

Stack Overflow用户
提问于 2020-11-26 18:26:27
回答 2查看 468关注 0票数 4

我有300+ .rds文件,每个文件都有相同的列名,我想把它们绑定到一个压缩的.rds文件中,我可以通过sftp进行传输。

有没有一种方法可以在不将它们读入内存的情况下有效地完成这项工作?

目前,我正在使用以下代码,但这会在写入文件之前耗尽内存。任何想法都是非常感谢的。

代码语言:javascript
复制
library(tidyverse)
library(data.table)

df <- list.files(pattern = ".rds") %>%
         map(readRDS) %>% 
         data.table::rbindlist()

    saveRDS(df,"df.rds")

最后,我逐个读入,并使用read::write_csv("name.csv",append=TRUE)将它们追加到磁盘上。之后,我使用{disk.frame}或SQL数据库来处理数据。

EN

回答 2

Stack Overflow用户

发布于 2020-12-16 07:32:59

正如其他人所评论的,追加/合并.rds文件可能是不可能的(或者至少是非常困难的)。但是,如果它们是简单的列,那么将它们转换为.csv应该是有问题的。在这种情况下,可以附加它们,假设(正如您所说的)它们具有匹配的列名。

这段代码从.rds文件名列表中读取,并将它们的数据附加到.csv。我几乎没有R经验,所以我不确定底层资源是如何管理的,但原则上这种方法应该允许您一次只读取一个文件,从而在构建大约300 1GB的.csv时将内存消耗保持在大约1 1GB。

代码语言:javascript
复制
fileNames <- list('test-one.rds', 'test-two.rds')

for (fileName in fileNames)
{
    rds <- readRDS(fileName)
    for (row in rds){
        write(row, file = 'out.csv', append = TRUE)
    }
}
票数 0
EN

Stack Overflow用户

发布于 2020-12-16 14:36:22

如果您的最终目的是传输数据,请在sql server中读取和写入数据。

您可以将.rds转换为.csv,并使用HeidiSQL将其快速导入到结构化为您的csv的表中。

然后,在另一端,您可以从SQL读取数据并再次将其转换为.rds,或者直接将.csv发送过来。

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

https://stackoverflow.com/questions/65020129

复制
相关文章

相似问题

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