0

每天我用 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()

这解决了这个问题。

4

0 回答 0