在R中访问一个大的csv:read.table.ffdf会变慢

时间:2014-07-08 17:38:49

标签: r csv read.table large-data

我使用R并尝试使用大型CSV文件中的数据相对较新(约1320万行,每行约250个字段,总计约14 GB)。在搜索访问此数据的快速方法后,我遇到了ff包和read.table.ffdf方法。我一直在使用它如下:

read.table.ffdf(file="mydata.csv",sep=',',colClass=rep("factor",250),VERBOSE=TRUE)

然而,在激活VERBOSE设置的情况下,我注意到以下输出表明每个连续的块写入往往需要越来越长。

read.table.ffdf 1..1000 (1000)  csv-read=0.131sec ffdf-write=0.817sec
read.table.ffdf 1001..18260 (17260)  csv-read=2.351sec ffdf-write=24.858sec
read.table.ffdf 18261..35520 (17260)  csv-read=2.093sec ffdf-write=33.838sec
read.table.ffdf 35521..52780 (17260)  csv-read=2.386sec ffdf-write=41.802sec
read.table.ffdf 52781..70040 (17260)  csv-read=2.428sec ffdf-write=43.642sec
read.table.ffdf 70041..87300 (17260)  csv-read=2.336sec ffdf-write=44.414sec
read.table.ffdf 87301..104560 (17260)  csv-read=2.43sec ffdf-write=52.509sec
read.table.ffdf 104561..121820 (17260)  csv-read=2.15sec ffdf-write=57.926sec
read.table.ffdf 121821..139080 (17260)  csv-read=2.329sec ffdf-write=58.46sec
read.table.ffdf 139081..156340 (17260)  csv-read=2.412sec ffdf-write=63.759sec
read.table.ffdf 156341..173600 (17260)  csv-read=2.344sec ffdf-write=67.341sec
read.table.ffdf 173601..190860 (17260)  csv-read=2.383sec ffdf-write=70.157sec
read.table.ffdf 190861..208120 (17260)  csv-read=2.538sec ffdf-write=75.463sec
read.table.ffdf 208121..225380 (17260)  csv-read=2.395sec ffdf-write=109.761sec
read.table.ffdf 225381..242640 (17260)  csv-read=2.824sec ffdf-write=131.764sec
read.table.ffdf 242641..259900 (17260)  csv-read=2.714sec ffdf-write=116.166sec
read.table.ffdf 259901..277160 (17260)  csv-read=2.277sec ffdf-write=97.019sec
read.table.ffdf 277161..294420 (17260)  csv-read=2.388sec ffdf-write=158.784sec

我的理解是,通过将数据帧存储在文件中,ff可以避免因使用所有可用RAM而导致的减速。写每个块应该花费相似的时间,对吧?我做错了什么或者更好地解决了我想要完成的事情?

提前感谢您提供的任何见解!

1 个答案:

答案 0 :(得分:3)

您是否尝试过data.table包中的fread功能?我经常加载那个大小的文件,尽管它需要一些时间,但它比基础R强大且快得多。给它一个去吧。

library(data.table)
X<-fread("mydata.csv")