大数据读取子样本[R(Big data read subsamples R)

2019-06-27 02:50发布

我非常感谢您的时间阅读本。

我的CSV格式的图万条记录和3000(主要是分类数据)列的尤伯杯大小30GB文件。 我想引导的多项式回归子样本,但它证明很难,即使在我的机器我的64GB RAM和两倍的交换文件,过程变得超级慢和死机。

我正在考虑中的R生成子样本indicies,并将它们送入用awk或者sed系统命令,但不知道如何做到这一点。 如果有人知道的清洁方式只用R命令要做到这一点,我会很感激。

一个问题是,我需要选择子样本的完整的观察,这是我需要有一个特定的多项观察所有行 - 他们是不一样的长度继续观察。 我打算使用glmnet然后一些奇特的转变,以得到一个近似的多项案例。 另一点是,我不知道该如何选择样本大小,以适应周围的内存限制。

非常感谢您的想法。

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   

尤达

Answer 1:

我认为这是使用CSV作为这样的文件大小的数据格式非常可怕的想法-为什么不将其转化为一个SQLite(或“实际”的数据库),并与SQL查询提取您的子集(使用DBI / RSQLite 2 )?

你只需要导入一次,并没有必要将整个事情加载到内存中,因为您可以直接导入CSV文件导入到sqlite的。

如果在一般你想与比你的内存更大的数据集工作,你可能也想看看bigmemory 。



Answer 2:

作为themel指出,R是非常阅读的CSV文件很慢。
如果你有sqlite的,它确实是最好的方法,因为它出现的数据挖掘不只是一次,而是在多个会议上,以多种方式。

让我们看一下我们的选项

读取CSV到R(慢)

中的R这样做是像20倍慢,比写在C(我的机器上)的工具

这是很慢

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

转换为STATA从那里事先DTA文件和负载

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

编写一个程序来CSV转换成DTA格式(如果你知道你在做什么)

使用从资源http://www.stata.com/help.cgi?dta和代码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)

从s 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做所有的源码/ PostgreSQL的/ MySQL后端SQL的东西导入CSV(Reccomended)

下载,从https://code.google.com/p/sqldf/如果没有包
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)选项:-)



文章来源: Big data read subsamples R