每天我用VB脚本在一秒钟内从网上解析大约700 MB。程序每天创建大约13,000个文件。
使用R我试图将这些文件放入数据库。为了实现这一目标,我创建了 for loop ,它遍历我下载的所有文件,并将它们写入存储在目录中的数据库。
在每次迭代中,我都有以下代码:
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)
}
}
}
问题
当我打开任务管理器时,我发现在一天内只读取了50%的文件后,RStudio的内存使用率约为90%。这意味着我将无法在一天内创建一个数据库。 RAM使用率为55%左右,大约为4.2GB。
它甚至更奇怪,因为目录中创建的数据库大小只有大约40MB!
问题
有没有办法用R构建这样的数据库? 我选择了write.table但它可以是任何函数,它给我一个可以迭代方式存储的输出(所以可以将数据附加到现有文件的函数)。
如果不在R中 - 用什么编程语言呢?
修改
数据库 - 现在它被计划为平面文件(csv)。这令人困惑。目标是以任何方式存储数据,这样可以再次有效地读取R(不使用太多RAM)
file - 这些是HTML文件,这就是我使用xpathSApply的原因。一个文件大约是28KB。
解
我解决这个问题的方法是创建外部循环,以块的形式读取数据。循环的每次迭代后,我把
.rs.restartR()
解决了这个问题。