大数据读取子样本R

我非常感谢你的阅读时间。

我有一个超大尺寸的30GB文件,包含600万条logging和3000个(主要是分类数据)列的CSV格式。 我想引导子样本进行多项式回归,但是即使在我的机器上有64GB的RAM和两倍的交换文件,这也certificate是困难的,这个过程变得非常慢并且暂停。

我正在考虑在R中生成子采样索引,并使用sed或awk将它们送入系统命令,但不知道如何执行此操作。 如果有人知道一个简单的方法来使用R命令,我会很感激。

一个问题是,我需要挑选完整的子样本观察数据,也就是说,我需要获得特定多项式观测的所有行 – 从观察到观测,它们的长度不一样。 我打算使用glmnet,然后进行一些奇特的变换以获得多项式的近似值。 另一点是我不知道如何select样本大小来适应内存限制。

大大欣赏你的想法。

R.version platform x86_64-pc-linux-gnu arch x86_64 os linux-gnu system x86_64, linux-gnu status major 2 minor 15.1 year 2012 month 06 day 22 svn rev 59600 language R version.string R version 2.15.1 (2012-06-22) nickname Roasted Marshmallows 

尤达

Solutions Collecting From Web of "大数据读取子样本R"

我认为使用CSV作为这种文件大小的数据格式是一个非常可怕的想法 – 为什么不把它转换成SQLite(或“实际”数据库)并用SQL查询(使用DBI / RSQLite 2 )提取子集?

您只需要导入一次,而不需要将整个内容加载到内存中,因为您可以直接将CSV文件导入到sqlite中。

如果一般情况下你想使用比你的内存大的数据集,你可能还想看看bigmemory 。

正如主题所指出的,读取csv文件时,R非常慢。
如果你有sqlite的话,这确实是最好的方法,因为看起来数据挖掘不止一次,而是以多种方式在多个会话上进行。

让我们看看我们的选择

读取csv到R(慢)

在R中做这个比用C写的工具慢20倍(在我的机器上)

这很慢

 read.csv( file='filename.csv' , head=TRUE , sep=",") 

事先转换为stata dta文件并从那里加载

不是很好,但它应该工作(我从来没有尝试过30个演出文件,所以我不能肯定地说)

编写一个程序将csv转换为dta格式(如果你知道你在做什么)

使用http://www.stata.com/help.cgi?data中的资源和https://svn.r-project.org/R-packages/trunk/foreign/src/stataread.c中的代码来阅读和写和http://sourceforge.net/projects/libcs​​v/
(过去已经完成了,但是我没有用过,所以我不知道它的表现如何)

然后使用foreign包( http://cran.r-project.org/web/packages/foreign/index.html ),一个简单的

 library(foreign) whatever <- read.dta("file.dta") 

会加载你的数据

直接使用mysql导入csv数据(难以使用,但是如果你知道SQL,那就不是那么糟糕)

从SQL控制台

 LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE my_table IGNORE 1 LINES <- If csv file contains headers FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n' 

要么

 mysql -e "LOAD DATA INFILE 'ls.dat' INTO TABLE mytable1" mydatabase 

然后从R控制台播放,使用RMySQL R接口到MySQL数据库http://cran.r-project.org/web/packages/RMySQL/index.html

 install.packages('RMySQL') 

那就玩吧

 mydb = dbConnect(MySQL(), user=username, password=userpass, dbname=databasename, host=host) dbListTables(mydb) record <- dbSendQuery(mydb, "select * from whatever") dbClearResult(rs) dbDisconnect(mydb) 

用R来做所有的sqlite / postgreSQL / MySQL后端SQL的东西来导入csv(Reccomended)

如果您没有该软件包,请从https://code.google.com/p/sqldf/下&#x8F7D;
或者svn checkout http://sqldf.googlecode.com/svn/trunk/ sqldf-read-only

从R控制台,

 install.packages("sqldf") # shows built in data frames data() # load sqldf into workspace library(sqldf) MyCsvFile <- file("file.csv") Mydataframe <- sqldf("select * from MyCsvFile", dbname = "MyDatabase", file.format = list(header = TRUE, row.names = FALSE)) 

而你走了!

Presonally,我会推荐图书馆(sqldf)选项:-)