gpt4 book ai didi

R:如何将 300 个 1GB .rds 文件合并为 1 个大 rds 文件而不将它们读入内存?

转载 作者:行者123 更新时间:2023-12-03 17:23:09 25 4
gpt4 key购买 nike

我有 300 多个 .rds 文件,每个文件都具有相同的列名,并希望将它们绑定(bind)到一个压缩的 .rds 文件中,我可以通过 sftp 传输该文件。
有没有办法在不将它们读入内存的情况下有效地做到这一点?
目前我正在使用以下代码,但这会在写入文件之前最大化内存。任何想法都非常感谢。

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 数据库来处理数据。

最佳答案

正如其他人评论的那样,追加/合并 .rds 可能是不可能的(或至少非常困难)文件。但是,如果它们是简单的列,那么将它们转换为 .csv 应该会有问题。 .在这种情况下,可以附加它们,假设(如您所说)它们具有匹配的列名。
此片段从 .rds 的列表中读取。文件名并将其数据附加到 .csv .我几乎没有 R 经验,所以我不确定如何管理底层资源,但原则上,这种方法应该允许您一次只读取一个文件,从而在构建时将内存消耗保持在 ~1GB您的 ~300GB .csv .

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)
}
}

关于R:如何将 300 个 1GB .rds 文件合并为 1 个大 rds 文件而不将它们读入内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65020129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com