【发布时间】:2011-12-27 12:42:49
【问题描述】:
我正在读取 R 中的一个大型事件文件,接近 200 万行,将每一行解析为一组事件属性并存储在我的矩阵中。我预先分配了一个巨大的矩阵(200 万个事件),从文件中读取一小块,重复并处理它。但是处理文件花费的时间太长。我想知道我能做些什么来提高性能。这是我的代码 sn-p:
numEvents <<- 2000000;
eventLog <<- matrix(0,nrow=numEvents,ncol=4);
loadEvents <- function(inputfile) {
con <- file(inputfile, "r", blocking = FALSE)
batch <- 1000
lines <- readLines(con,n=batch)
while(length(lines) > 0 && eventCount <= numEvents) {
for (i in 1:length(lines))
storeEvent(lines[i]); # processes and stores each event in eventlog
lines <- readLines(con,n=batch)
}
close(con);
}
您认为批量大小不是最优的吗?
非常感谢这里的任何想法。
【问题讨论】:
-
2m 行对我来说似乎不是很大。您的性能问题可能与读取文件无关,而是您没有对处理函数进行矢量化。
-
处理函数相当简单。它从文件中读取属性并应用一些条件,然后将其存储在事件日志的下一个索引中。没有矢量化的余地。我认为有可能优化我读取文件的方式..
-
永远不要说没有向量化的空间......你能告诉我们这个解析是什么样子吗?
-
它在本质上有点专有,所以我不能在这里发布。我试图增加批量大小,它对性能有积极影响。所以我试图找到最佳的批量大小。