在 R 中访问大型 csv:read.table.ffdf 变慢

Posted

技术标签:

【中文标题】在 R 中访问大型 csv:read.table.ffdf 变慢【英文标题】:Accessing a large csv in R: read.table.ffdf slows down 【发布时间】:2014-08-29 13:38:18 【问题描述】:

我对使用 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】:

您是否尝试过 data.table 包中的 fread 函数?我经常加载这种大小的文件,尽管这需要一些时间,但它很强大,而且比基本 R 快得多。试试看吧。

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

【讨论】:

以上是关于在 R 中访问大型 csv:read.table.ffdf 变慢的主要内容,如果未能解决你的问题,请参考以下文章

R数据导入导出: read.table()和read.csv()的区别

R 函数笔记 read.table()函数

试图读取存储在csv文件中的R中的推文

R语言学习——循环判断语句

在 R 中处理大型 csv 文件

R语言数据分析过程