如何让Hadoop结合R语言做大数据分析?

Python016

如何让Hadoop结合R语言做大数据分析?,第1张

R语言和Hadoop让我们体会到了,两种技术在各自领域的强大。很多开发人员在计算机的角度,都会提出下面2个问题。问题1: Hadoop的家族如此之强大,为什么还要结合R语言?

问题2: Mahout同样可以做数据挖掘和机器学习,和R语言的区别是什么?下面我尝试着做一个解答:问题1: Hadoop的家族如此之强大,为什么还要结合R语言?

a. Hadoop家族的强大之处,在于对大数据的处理,让原来的不可能(TB,PB数据量计算),成为了可能。

b. R语言的强大之处,在于统计分析,在没有Hadoop之前,我们对于大数据的处理,要取样本,假设检验,做回归,长久以来R语言都是统计学家专属的工具。

c. 从a和b两点,我们可以看出,hadoop重点是全量数据分析,而R语言重点是样本数据分析。 两种技术放在一起,刚好是最长补短!

d. 模拟场景:对1PB的新闻网站访问日志做分析,预测未来流量变化

d1:用R语言,通过分析少量数据,对业务目标建回归建模,并定义指标d2:用Hadoop从海量日志数据中,提取指标数据d3:用R语言模型,对指标数据进行测试和调优d4:用Hadoop分步式算法,重写R语言的模型,部署上线这个场景中,R和Hadoop分别都起着非常重要的作用。以计算机开发人员的思路,所有有事情都用Hadoop去做,没有数据建模和证明,”预测的结果”一定是有问题的。以统计人员的思路,所有的事情都用R去做,以抽样方式,得到的“预测的结果”也一定是有问题的。所以让二者结合,是产界业的必然的导向,也是产界业和学术界的交集,同时也为交叉学科的人才提供了无限广阔的想象空间。问题2: Mahout同样可以做数据挖掘和机器学习,和R语言的区别是什么?

a. Mahout是基于Hadoop的数据挖掘和机器学习的算法框架,Mahout的重点同样是解决大数据的计算的问题。

b. Mahout目前已支持的算法包括,协同过滤,推荐算法,聚类算法,分类算法,LDA, 朴素bayes,随机森林。上面的算法中,大部分都是距离的算法,可以通过矩阵分解后,充分利用MapReduce的并行计算框架,高效地完成计算任务。

c. Mahout的空白点,还有很多的数据挖掘算法,很难实现MapReduce并行化。Mahout的现有模型,都是通用模型,直接用到的项目中,计算结果只会比随机结果好一点点。Mahout二次开发,要求有深厚的JAVA和Hadoop的技术基础,最好兼有 “线性代数”,“概率统计”,“算法导论” 等的基础知识。所以想玩转Mahout真的不是一件容易的事情。

d. R语言同样提供了Mahout支持的约大多数算法(除专有算法),并且还支持大量的Mahout不支持的算法,算法的增长速度比mahout快N倍。并且开发简单,参数配置灵活,对小型数据集运算速度非常快。

虽然,Mahout同样可以做数据挖掘和机器学习,但是和R语言的擅长领域并不重合。集百家之长,在适合的领域选择合适的技术,才能真正地“保质保量”做软件。

如何让Hadoop结合R语言?

从上一节我们看到,Hadoop和R语言是可以互补的,但所介绍的场景都是Hadoop和R语言的分别处理各自的数据。一旦市场有需求,自然会有商家填补这个空白。

1). RHadoop

RHadoop是一款Hadoop和R语言的结合的产品,由RevolutionAnalytics公司开发,并将代码开源到github社区上面。RHadoop包含三个R包 (rmr,rhdfs,rhbase),分别是对应Hadoop系统架构中的,MapReduce, HDFS, HBase 三个部分。

2). RHiveRHive是一款通过R语言直接访问Hive的工具包,是由NexR一个韩国公司研发的。

3). 重写Mahout用R语言重写Mahout的实现也是一种结合的思路,我也做过相关的尝试。

4).Hadoop调用R

上面说的都是R如何调用Hadoop,当然我们也可以反相操作,打通JAVA和R的连接通道,让Hadoop调用R的函数。但是,这部分还没有商家做出成形的产品。

5. R和Hadoop在实际中的案例

R和Hadoop的结合,技术门槛还是有点高的。对于一个人来说,不仅要掌握Linux, Java, Hadoop, R的技术,还要具备 软件开发,算法,概率统计,线性代数,数据可视化,行业背景 的一些基本素质。在公司部署这套环境,同样需要多个部门,多种人才的的配合。Hadoop运维,Hadoop算法研发,R语言建模,R语言MapReduce化,软件开发,测试等等。所以,这样的案例并不太多。

1.Linux与R的学习先后问题:

师姐说后面作生信分析要用Linux环境进行数据集群分析,所以目前首要任务是熟悉R语言和Python的操作,后面转到Linux环境运行操作大同小异。

2.R及Rstudio的安装问题:

装了Rstudio之后显示没有装R,解决方案是R和Rstudio安装时选择默认路径,是这两个软件装在同一个目录下。

3.输入demo()后显示

>demo()

Warning message:

In file.show(outFile, delete.file = TRUE, title = paste("R", tolower(x$title))) :

  file.show():不存在'C:\Users\灏忔湪浜榎AppData\Local\Temp\RtmpENM66s\RpackageIQR28b82f592cbb'这个文件

(1)找出问题:R存在一个中文目录底下,会出现错误,所以首先第一步要将文件名(即user底下的名字)改为英文的(注:以后文件名尽量设置为英文的,才方便识别)

(2)解决问题:因为win为家庭版,所以没有在计算机管理中没有找到本地用户和组,借鉴了CSDN论坛中一位大神经验贴的后半部分【 【设置】Win10如何更改C:\Users\下的用户名_胡振涛-CSDN博客_如何更改users下的用户名 】,从win+R输入regedit(打开注册表)那块开始,后面将自己中文的文件名改成英文就好了,然后注销再打开,运行R后,输入demo(),显示界面如下图。

4.options()是个啥,没整明白?

   options:指定系统参数

5. runif()函数

    runif (random samples from uniform distribution)  均匀分布中的随机变量

    例如:runif(242, min =-0.3,max=0.3) 从-0.3 到0.3 随机产生242个值

6.包及库

           1——已经安装的包

           2——用来放R安装时自带的包(如base,state等)

7.函数括号内加“”的规律:外部的东西要加引号。安装以后内部的东西不用加引号。

8.批处理命令打出来很奇怪?

9.返回值?——一个运算函数被赋予具体数据后得到值return到这个函数变量上(操作型函数没有返回值)

10.help(package="vcd"/"ggplot2"),命令后help界面无显示

未找到问题原因,解决方案为在CRAN上直接看好了。

11.安装ggplot2包后,输入library(ggplot2),没有反应——说明你装上了。。(有些包library成功是没有输出的)

相反的是可以看到如果安装的是tidyverse,输入library(tidyverse),是有输出的

12.Rstudio工作路径&库安装路径修改(我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《Rstudio更改工作路径&安装包路径》, 一起来围观吧 https://blog.csdn.net/princessyang/article/details/105731349?utm_source=app&app_version=4.7.1&code=app_1562916241&uLinkId=usr1mkqgl919blen)

工作路径修改

getwd()——得到目前的工作路径

setwd(“目标工作路径”)

getwd()——就可以看到路径更改了

库安装路径修改

打开

13.忘了在操作台输入啥可以显示那一长条的包了?

14.数据集和数据结构

    1)数据集就是多个数据组成的集合

    2)数据结构就是数据集的结构

15.rep函数

rep(1:4, each = 2)——1到4,每个element循环2次

[1] 1 1 2 2 3 3 4 4

rep(1:4, c(2,2,2,2))——1到4,对应位置上的element循环2次

[1] 1 1 2 2 3 3 4 4

rep(1:4, c(2,1,2,1))——1到4,对应位置上的element有的循环1次,有的循环2次

[1] 1 1 2 3 3 4  

16.rep(1,40*(1-.8))什么意思?

就是说1这个数字,重复40*(1-0.8)=8遍,但其实只重复7遍,因为计算机返回的结果比8稍小一点。

如果想要得到循环8次,可以使用这个函数:rep(1,round(40*(1-.8)))

17.矩阵

(1)只有在数据长度不是矩阵行数或者列数整数倍的时候才会报错,在矩阵列数X行数所需数据大于数据长度时,会再次重复排列数据,但不会报错。

(2)矩阵默认按照 列 的顺序来排列数据,

matrix(x,5,byrow = T) 按照 行 的顺序排列

 matrix(x,5,byrow = F) 按照 列 的顺序排列

(3)以字符型向量添加行名和列名

>rnames <- c("R1","R2","R3","R4")

>cnames <- c("C1","C2","C3","C4","C5")

>dimnames(m) <- list(rnames,cnames)

(4)矩阵汇总

(5)矩阵索引

y[1,2]——y矩阵中第1行,第2列

18.数组