作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 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/
我是一名优秀的程序员,十分优秀!