R语言与大数据在数据分析方面,R拥有一系列连贯而又完整的数据分析中间工具,图形统计可以对图形直接进行分析和显示,并且有非常丰富的程序包,可以大大提高工作效率。R在以下三个方面有很大的优势:数据处理,统计和数据可视化。Google主要使用R进行数据探索和构建模型原型,其主要流程为:1.使用其他工具提取数据2.将数据加载到R中3.使用R软件进行建模分析4.在生产环境中使用c或者python实现结果模型在使用R的过程中,因为R的工作区是RAM,因此大小是受到限制的,主要有以下三个方法来解决这个问题:1.使用R的数据库连接功能(例如RMySQL),对数据进行切片处理2.抽样处理数据3.在独立的服务器或者云计算环境下运行RR可以与其他工具和语言进行交互,包括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.cores),其中parLapply是针对函数lapply的优化,而mclapply在windows环境下不能使用。例子:1.不使用并行计算,直接使用lapply函数,对函数f=x+1做500万次,计算时间fun-function(x){return(x+1)}system.time({res-lapply(1:5000000,fun)})用户系统流逝17.140.1417.292.使用parallel包进行并行计算采用4核进行并行计算:cl-makeCluster(getOption(cl.cores,4))system.time({res-parLapply(cl,1:5000000,fun)})用户系统流逝10.500.4116.88采用3核进行并行计算:cl-makeCluster(getOption(cl.cores,3))system.time({res-parLapply(cl,1:5000000,fun)})用户系统流逝2.780.1111.08采用2核进行计算:cl-makeCluster(getOption(cl.cores,2))system.time({res-parLapply(cl,1:5000000,fun)})用户系统流逝2.640.2712.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语言里面进行数据预处理和算法建模过程,再把分析模型的结果集导出。