R语言 大数据处理的简单策略——分段处理
面对大数据你小小的电脑是不是感觉到越来越力不从心了。R语言中专门提高了一些包,突破内存的限制,让小电脑也能处理大数据。常见的包如下:
包 | 描述 |
---|---|
ff | 提供了一种数据结构,保存在硬盘中,但是操作起来就如同在内存中一样 |
bigmemory | 支持大规模矩阵的创建、储存、读取和操作。矩阵被分配到共享内存或内存映射的文件中(memory-mapped files) |
filehash | 实现了简单的key-value数据库,在其中特征字符串key与存储在硬盘中的数据value相关联。 |
ncdf, ncdf4 | Provides an interface to Unidata netCDF data files. |
RODBC, RMySQL, ROracle, RPostgreSQL, RSQLite | 可以用这些包读取外部关系数据库管理系统的数据 |
注:转自《R in action》
但是这些包学起来也不容易,我看了半天的说明书也没看懂怎么用,奈何英文不好,中文材料也相对少。
现在提供了一个简单直观的方法处理大数据,缺点是消耗时间长,不能整体处理数据,只能处理能分段处理的数据。
具体代码如:
######################################################################
#R语言下 大数据分段处理策略
#用readlines() 每次读取一定行数,进行分段处理
# writed by mine date:2013.12.22
#######################################################################
fl=file.choose()
c=file(fl,”r”)
on.exit(c)
rlnm=readLines(c,n=1) #第一行为列名
mks=1
nrows=1000 #设置处理的行数
while(T){
rl=readLines(c,n=nrows) #读nrows行
if(length(rl)==0){
break
}else{
rl=c(rlnm,rl)
mks=mks+nrows
data=read.table(text=rl,sep=“t”,head= T,stringsAsFactors=F)#从rl_all中读到data.frame
#myfun(data)
cat(cat(“已处理”,mks,”行n”)
}
}
close(c)