我对使用 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 而导致的速度减慢。写入每个块应该花费相似的时间,对吗?有没有我做错了什么或有更好的方法来完成我希望完成的工作?
预先感谢您提供的任何见解!
最佳答案
您是否尝试过 data.table 包中的 fread 函数?我经常加载这种大小的文件,尽管这需要一些时间,但它比基础 R 强大且快得多。试一试。
library(data.table)
X<-fread("mydata.csv")
关于r - 访问 R : read. table.ffdf 中的大型 csv 速度变慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24638253/