每天我用 VB 脚本每隔一秒从网络解析大约 700 MB。程序每天创建大约 13,000 个文件。
使用 R,我试图将这些文件放入数据库中。为了实现这一点,我创建了for 循环,该循环遍历我下载的所有文件并将它们写入存储目录的数据库中。
在每次迭代中,我都有以下代码:
rm(list=c('var1', 'var2'))
unlink(file)
gc()
我希望能解决这个问题。它没有。
在主循环中,我有内部循环在读取文件后保存文件。
for (i in seq_along(listofallfiles)) {
(here goes code to parse data out of files and store them in var1, var2, etc. -)
file = paste(path,"\\",l[i], sep="")
txt = readLines(file,skipNul = TRUE)
html = htmlTreeParse(txt, useInternalNodes = TRUE)
name = xpathSApply(html, "//td/div/span[starts-with(@class, 'name')]", xmlValue)
(then goes many more var2, var3 that are based on xpathSapply)
for (j in seq_along(name)) {
final_file = paste(direction,"\\", name[j], ".csv", sep="")
if (file.exists(final_file)) {
write.table(t(as.matrix(temp[j,])), file=final_file, row.names = FALSE, append=TRUE, col.names = FALSE)
} else {
file.create(final_file, showWarnings = FALSE)
write.table(t(as.matrix(temp[j,])), file=final_file, row.names = FALSE, append=TRUE)
}
}
}
问题
当我打开任务管理器时,我发现 RStudio 的内存使用率在一天仅读取了 50% 的文件后就达到了 90% 左右。这意味着我一天都无法创建一个数据库。55% 的 RAM 使用量约为 4.2GB。
更奇怪的是,在目录中创建的数据库大小只有 40MB 左右!
问题
有没有办法用 R 建立这样的数据库?我选择了 write.table 但它可以是任何给我输出的函数,该输出可以以迭代方式存储(因此可以将数据附加到现有文件的函数)。
如果不是在 R 中 - 那么用什么编程语言呢?
编辑
数据库- 目前计划为平面文件 (csv)。这很令人困惑。目标是以任何可能且有效的方式存储数据,以便再次在 R 中读取(不使用太多 RAM)
文件- 这些是 HTML 文件,这就是我使用 xpathSApply 的原因。一个文件大约 28KB。
解决方案
我对这个问题的解决方案是创建分块读取数据的外循环。在循环的每次迭代之后,我把
.rs.restartR()
这解决了这个问题。