从巨大的文件中读取特定的行*快*

时间:2013-08-16 22:29:51

标签: r bigdata

我有一个巨大的逗号分隔文件(1.5 Gb),并希望从R中的文件中读取一个特定的行。

我已经多次看过这个问题的(很多)版本了,所有这些都建议像

con = file(fileName)
open(con)
scan(con, what=list("character", "character"), skip=1000000, nlines=1, sep="\t", quiet=TRUE)

这有效,但它仍然非常慢 - 我们在20到30秒之间谈论读一行!

有更快的方法吗?当然必须有一种快速的方法来跳转到特定的线路......

万分感谢!

1 个答案:

答案 0 :(得分:0)

你对文件的结构有什么了解吗?

如果每个行/行具有完全相同的字节数,那么您可以计算字节数和seek到行的开头。

但是,如果每行的每行字节数不完全相同,则需要读取每个字符,检查它是否是换行符(或其他回车符,或两者都有)并计算这些字符以查找你要找的那条线。这就是skipscan和朋友的争论。

可能还有其他工具可以更快地进行读取和计数,您可以对文件进行预处理并仅返回感兴趣的行。

如果要多次执行此类操作,则可以加快整个过程,将文件读入不同的结构(如数据库),可以直接访问任意行,或者预先对行进行索引您可以seek直接到相应的行。