R语言与大数据
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
R语言与大数据
在数据分析方面,R拥有一系列连贯而又完整的数据分析中间工具,图形统计可以对图形直接进行分析和显示,并且有非常丰富的程序包,可以大大提高工作效率。R在以下三个方面有很大的优势:数据处理,统计和数据可视化。
Google主要使用R进行数据探索和构建模型原型,其主要流程为:1.使用其他工具提取数据2.将数据加载到R中3.使用R软件进行建模分析4.在生产环境中使用c或者python实现结果模型
在使用R的过程中,因为R的工作区是RAM,因此大小是受到限制的,主要有以下三个方法来解决这个问题:1.使用R的数据库连接功能(例如RMySQL),对数据进行切片处理2.抽样处理数据3.在独立的服务器或者云计算环境下运行R
R可以与其他工具和语言进行交互,包括matlab,SAS,excel等,另外还提供了与Python和java的接口包(Rpy和RJava)。
R语言并行处理
R语言在2.14版本以后内置了parallel包,强化了R的并行计算能力。该包整合了之前比较成熟的snow包和multicore包,其中multicore包不能在windows 环境下运行。Parallel包可以很容易在计算集群上实施并行计算,在具有多个cpu 核心的单机上,也能发挥并行计算的功能。
Parallel包的思路是将输入数据进行分割、计算、整合结果,其中的并行计算是通过使用不同的cpu来运算。在parallel包中有两个核心函数parlapply(cl,x,Fun,…)和mclapply(x,Fun,…,mc.core s),其中parLapply是针对函数lapply的优化,而mclapply在windows环境下不能使用。
例子:
1.不使用并行计算,直接使用lapply函数,对函数f=x+1做500万次,计算
时间
>fun<-function(x){return (x+1)}
>system.time({res<-lapply(1:5000000,fun)})
用户系统流逝
17.14 0.14 17.29
2.使用parallel包进行并行计算
采用4核进行并行计算:
>cl<-makeCluster(getOption("cl.cores",4))
>system.time({res<-parLapply(cl,1:5000000,fun)})
用户系统流逝
10.50 0.41 16.88
采用3核进行并行计算:
>cl<-makeCluster(getOption("cl.cores",3))
>system.time({res<-parLapply(cl,1:5000000,fun)})
用户系统流逝
2.78 0.11 11.08
采用2核进行计算:
>cl<-makeCluster(getOption("cl.cores",2))
>system.time({res<-parLapply(cl,1:5000000,fun)})
用户系统流逝
2.640.27 12.25
从上述例子可以看出,在处理大数据集问题时,并行计算可以加速计算过程。但是在R中并非使用的CPU核越多越好,在上例中,采用3核计算得到的结果最好,而2核次之,4核的计算和单核计算差别不大。
Hadoop与R语言
Hadoop让大数据的处理成为了可能,而R语言的强大之处在于在有Hadoop 以前,我们队大数据的处理都是取样本,假设检验,做回归等。可以看出,Hadoop 的优势在于全量数据分析,而R语言的重点是样本数据分析。而mahout同样可以做数据挖掘和机器学习,但是mahout是基于Hadoop框架的,其重点同样是解决大数据的计算问题,目前mahout已经支持的算法包括聚类算法、分类算法、LDA、bayes以及协同过滤等算法,其中大部分都是距离的算法,能够充分利用mapreduce的并行计算框架高效地完成计算任务。但是许多数据挖掘算法很难实现mapreduce并行化,而R语言也提供了mahout支持的许多算法,并且还支持大量的mahout不支持的算法,并且对小型数据集运算速度非常快。
目前,将R语言与大数据处理平台进行结合主要有两种方式。第一种方法是在Hadoop上将TB甚至PB级的数据利用mapreduce处理之后,将其数据容量缩
小到GB数量级,再加载到R中进行处理。第二种方法是直接利用支持Hadoop 的R包,在R中操作存放在HDFS中的数据,并利用R语言完成mapreduce算法,用来替代java的mapreduce实现,可以说RHadoop包赋予了R语言更强大的能力来处理高达TB乃至PB级的数据。
基于分布式的Hadoop在数据存储过程有一定的优势,然后直接运用R 语言的RJDBC包链接Hive传递SQL进行数据查询导入,得到的数据在R语言里面进行数据预处理和算法建模过程,再把分析模型的结果集导出。