[英]The fastest way to to read several huge .txt files OVER LOOP into r
本主题(将非常大的表作为数据帧快速读取)调查了相同的问题,但不是在循环中。 我有 1000 个不同的.txt 文件,每个 200 mb 有 100 万行。 那么在循环中读取它们的最快方法是什么?
我已经针对 10 个文件的案例报告的计算时间练习了以下方法。
for (i in 1:10){
x<- read.delim()
# do something
}
# Time : 89 sec
for (i in 1:10){
x<- read.table()
# do something
}
# Time : 90 sec
for (i in 1:10){
x <- fread()
# do something
}
# Time : 108 sec . !!!! (to my knowledge it is supposed to be the fastest, but when it comes to loop it is not the fastest though)!
foreach (i in 1:10)%dopar{
x<- read.delim()
# do something
}
# Time: 83 sec
foreach(i in 1:10) %dopar{
x <- fread()
# do something
}
# Time: 95 sec
有人告诉我 disk.frame() 包是最快的。 还不能尝试。 需要你的想法,请。 可以应用 Laapply 来加快流程吗?
也许 lapply() 可以帮助,正如你所建议的
myFiles <- list.files(pattern="txt$")
myList <- lapply(myFiles, function(x) fread(x))
我也很惊讶 fread 需要比 read.table 更长的时间。 当我有大文件时,fread 确实有助于更快地读取它们。
我添加这个作为答案以获得比评论更多的空间。
200 GB 的文本文件是相当大的数据,需要付出大量努力来加快处理速度或等待大量时间。 没有简单的方法;)
要获得原始加载时间, bash
是您的朋友。 使用pipe viewer
或内置time
您可以通过执行以下操作轻松检查读取文件所需的时间
pv mydata.txt > /dev/null
# alternatively
time cat mydata.txt > /dev/null
请注意,当您重复测量单个文件时,您的磁盘缓存将启动。
至于压缩,如果您坚持使用 R, gzip
是唯一合理的选择。 如果您要在bash
进行一些预处理,则lz4
是首选工具,因为它在适当的压缩比下非常快。
gzip -3 mydata.txt
pv mydata.txt.gz | zcat > /dev/null
在这里,我们开始进行预处理。 使用 UNIX 工具在加载到 R 之前对数据进行预处理往往非常快是值得的。您可以使用cut
过滤列,使用mawk
过滤行(这通常比gawk
快得多)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.