大数据挖掘工具资料收集之RhadoopV1.0
更新时间:2023-05-22 09:50:01 阅读量: 实用文档 文档下载
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
1 基本介绍
1.1 简介
RHadoop是运行R语言的Hadoop分布式计算平台的简称。要认识Rhadoop首先我们分别来认识R语言和Hadoop。
Hadoop已经成名好多年了,它是Apache软件基金会旗下的一个JAVA开源分布式计算平台,现已被各大互联网企业(包括Yahoo和Facebook等)用于大规模数据分布式存储与分布式计算。近年来随着云计算、大数据处理、数据挖掘等概念和应用越来越火,Hadoop更是名声大噪,各大企业对熟悉Hadoop体系架构和性能优化的人才需求也相当旺盛,人才缺口也相对加大。
R语言可能对大多数人来说比较陌生,但是做数理统计、数据分析的人不会不知道R。R是一门主要运用于统计分析与绘图的编程语言和操作工具。和Matlab类似,R是一门高级脚本化编程语言,直接在命令行输入指令即可运行,无需编译链接。它可以进行高效的向量化运算,效率远高于传统的循环运算。另外,R是开源的,有大批杰出的工程师和程序员为R开发了许多好用的函数库和图形化工具,尤其在数理统计方面有大量成熟的开源的程序包。所以R是做数据挖掘、数据分析的廉价高效的方案。
1.2 功能
Rhadoop是将R的强大统计分析能力和hadoop的大数据处理能力相结合,可由以下几项功能组成。
R内置多种统计学及数字分析功能
R的另一强项是绘图功能,制图具有印刷的素质,也可加入数学符号 Hadoop分布式文件系统,高吞吐量的数据级别达到TB、PB甚至EB Mapreduce高效并行计算
1.3 常用算法包
Rhadoop中的数据挖掘算法均来自R语言(或者说R软件),常用算法包如下:
1.3.1 聚类
常用的包: fpc,cluster,pvclust,mclust 基于划分的方法: kmeans, pam, pamk, clara
基于层次的方法: hclust, pvclust, agnes, diana 基于模型的方法: mclust 基于密度的方法: dbscan
基于画图的方法: plotcluster, plot.hclust
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
基于验证的方法: cluster.stats
1.3.2 分类
常用的包:
rpart,party,randomForest,rpartOrdinal,tree,marginTree, maptree,survival 决策树: rpart, ctree
随机森林: cforest, randomForest
回归, Logistic回归, Poisson回归: glm, predict, residuals 生存分析: survfit, survdiff, coxph
1.3.3 关联规则与频繁项集
常用的包:
arules:支持挖掘频繁项集,最大频繁项集,频繁闭项目集和关联规则 DRM:回归和分类数据的重复关联模型
APRIORI算法,广度RST算法:apriori, drm
ECLAT算法: 采用等价类,RST深度搜索和集合的交集: eclat
1.3.4 序列模式
常用的包: arulesSequences SPADE算法: cSPADE
1.3.5 时间序列
常用的包: timsac 时间序列构建函数: ts
成分分解: decomp, decompose, stl, tsr
1.3.6 人工神经网络
nnet
1.3.7 支持向量机
e1071
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
1.3.8 统计
常用的包: Base R, nlme 方差分析: aov, anova 密度分析: density
假设检验: t.test, prop.test, anova, aov 线性混合模型:lme
主成分分析和因子分析:princomp
1.3.9 接入数据挖掘软件Weka算法包
RWeka: 通过这个接口,可以在R中使用Weka的所有算法。
2 系统架构
RHadoop是R环境+hadoop环境,是实际上是在hadoop集群中安装了R环境,通过R的三个包rmr、rhdfs、rhbase(分别是对应Hadoop系统架构中的,MapReduce, HDFS, HBase 三个部分),实现R对hadoop各个组件的调用,从而将R与hadoop平台结合,从而充分利用了R和hadoop各自的优势。Hadoop主要用来存储海量数据,R语言完成MapReduce 算法,用来替代Java的MapReduce实现,将R丰富的算法模型赋予分布式并行计算能力。
3 适用场景
Hadoop有海量数据存储能力和高效并行计算框架,但缺乏数据统计和建模能力,R语言可以为hadoop注入统计血脉,增强hadoop集群的数据统计分析和建模能力,R+Hadoop将实现高效的海量数据分析与挖掘技术。虽然hadoop软件家族中的mahout也可以实现机器学习算法的并行计算,但mahout的算法模型还是较少和不够成熟,并且本身是一个算法库,它缺少R语言(或者说R软件)的数据统计分析以及绘图能力,因而Rhadoop相比mahout有诸多优势。
4 优缺点分析
4.1 优缺点概览
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
4.2 主要优缺点说明
所以如果让能R运行在Hadoop平台上可以说是如虎添翼,可以让数据分析人员,即能用到R丰富的程序包,又能借助Hadoop分布式运算、分布式存储的优势做海量数据的处理。但由于R+Hadoop还不够成熟,企业级应用依然缺乏成功案例,
所以当实施R+Hadoop的应用时,还会碰到非常多的问题。
5 扩展性
Hadoop的高扩展性和R语言的高扩展性决定rhadoop的高扩展性
6 实际案例
6.1 简单示例(WordCount的例子)
使用rmr包和rhdfs包做个WordCount的试验。 首先要启动Hadoop。 system('start-all.sh')
system('hadoop dfsadmin -safemode leave') 加载R包。 require(rmr) require(rhdfs)
rhdfs包会建议做一个初始化测试。
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
hdfs.init()
编写wordcount函数。
wordcount <- function (input, output=NULL, split='[[:punct:][:space:]]+'){
mapreduce(input=input, output=output, map=function(k, v){
v2=unlist(strsplit(x=v, split=split)) v3=v2[v2!=' ']
lapply(v3, function(w){keyval(w, 1)}) },
reduce=function(k, vv){ keyval(k, sum(unlist(vv))) }) }
直接输入文本,转成HDFS文件,计数。 lines <- c('this is just a joke,', 'and that is just another joke,', 'we all like them very much,', 'because they are so funny.') lines_dfs <- to.dfs(lines)
wc1 <- wordcount(input=lines_dfs)
data.frame(do.call(rbind, from.dfs(wc1))) key val 1 a 1 2 is 2 3 so 1 4 we 1 5 all 1 6 and 1 7 are 1 8 joke 2 9 just 2 10 like 1 11 much 1 12 that 1 13 them 1 14 they 1 15 this 1 16 very 1 17 funny 1 18 another 1 19 because 1
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
6.2 R实现MapReduce的协同过滤算法
1.基于物品推荐的协同过滤算法介绍 2.R本地程序实现
3.R基于Hadoop分步式程序实现
每一章节,都会分为”文字说明部分”和”代码部分”,保持文字说明与代码的连贯性。
6.2.1 基于物品推荐的协同过滤算法介绍
文字说明部分:
越来越多的互联网应用,都开始使用推荐算法(协同过滤算法)。根据用户活跃度和物品流行度,可以分为”基于用户的协同过滤算法”和”基于物品的协同过滤算法”。
基于用户的协同过滤算法,是给用户推荐和他兴趣相似的其他用户喜欢的物品。 基于物品的协同过滤算法,是给用户推荐和他之前喜欢的物品相似的物品。
基于物品的协同过滤算法,是目前广泛使用的一种推荐算法,像Netflix, YouTube, Amazon等。 算法主要分为两步: 1. 计算物品之间的相似度
2. 根据物品的相似度和用户的历史行为给用户生成推荐列表
有关算法的细节请参考:”Mahout In Action”和”推荐系统实践”两本书。 为开发方便,我们选择一组很小的测试数据集。 测试数据,来自于”Mahout In Action” P49 原第8行,3,101,2.5 改为 3,101,2.0
每行3个字段,依次是用户ID,物品ID,对物品的评分
代码部分:
在服务上创建测试数据文件small.csv
~ pwd
/root/R
~ vi small.csv
1,101,5.0 1,102,3.0 1,103,2.5 2,101,2.0 2,102,2.5 2,103,5.0 2,104,2.0
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
3,101,2.0 3,104,4.0 3,105,4.5 3,107,5.0 4,101,5.0 4,103,3.0 4,104,4.5 4,106,4.0 5,101,4.0 5,102,3.0 5,103,2.0 5,104,4.0 5,105,3.5 5,106,4.0 ~ ls
small.csv
6.2.2 R本地程序实现
首先,通过R语言实现基于物品的协同过滤算法,为和RHadoop实现进行对比。这里我使用”Mahout In Action”书里,第一章第六节介绍的分步式基于物品的协同过滤算法进行实现。Chapter 6: Distributing recommendation computations 算法的思想:
1. 建立物品的同现矩阵 2. 建立用户对物品的评分矩阵 3. 矩阵计算推荐结果
文字说明部分:
1. 建立物品的同现矩阵
按用户分组,找到每个用户所选的物品,单独出现计数,及两两一组计数。 例如:用户ID为3的用户,分别给101,104,105,107,这4个物品打分。 1) (101,101),(104,104),(105,105),(107,107),单独出现计算各加1。
2) (101,104),(101,105),(101,107),(104,105),(104,107),(105,107),两个一组计数各加1。 3) 把所有用户的计算结果求和,生成一个三角矩阵,再补全三角矩阵,就建立了物品的同现矩阵。
如下面矩阵所示:
[101] [102] [103] [104] [105] [106] [107] [101] 5 3 4 4 2 2 1
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
[102] 3 3 3 2 1 1 0 [103] 4 3 4 3 1 2 0
[104] 4 2 3 4 2 2 1 [105] 2 1 1 2 2 1 1 [106] 2 1 2 2 1 2 0 [107] 1 0 0 1 1 0 1
2. 建立用户对物品的评分矩阵
按用户分组,找到每个用户所选的物品及评分
例如:用户ID为3的用户,分别给(3,101,2.0),(3,104,4.0),(3,105,4.5),(3,107,5.0),这4个物品打分。
1) 找到物品评分(3,101,2.0),(3,104,4.0),(3,105,4.5),(3,107,5.0) 2) 建立用户对物品的评分矩阵
U3 [101] 2.0 [102] 0.0 [103] 0.0 [104] 4.0 [105] 4.5 [106] 0.0 [107] 5.0
3. 矩阵计算推荐结果 同现矩阵*评分矩阵=推荐结果
推荐给用户ID为3的用户的结果是(103,24.5),(102,18.5),(106,16.5) 代码部分:
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
#引用plyr包 library(plyr)
#读取数据集
train<-read.csv(file="small.csv",header=FALSE) names(train)<-c("user","item","pref")
> train
user item pref 1 1 101 5.0 2 1 102 3.0 3 1 103 2.5 4 2 101 2.0 5 2 102 2.5 6 2 103 5.0 7 2 104 2.0 8 3 101 2.0 9 3 104 4.0 10 3 105 4.5 11 3 107 5.0 12 4 101 5.0 13 4 103 3.0 14 4 104 4.5 15 4 106 4.0 16 5 101 4.0 17 5 102 3.0 18 5 103 2.0 19 5 104 4.0 20 5 105 3.5 21 5 106 4.0
#计算用户列表
usersUnique<-function(){ users<-unique(train$user) users[order(users)] }
#计算商品列表方法
itemsUnique<-function(){ items<-unique(train$item) items[order(items)] }
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
# 用户列表
users<-usersUnique() > users [1] 1 2 3 4 5
# 商品列表
items<-itemsUnique() > items
[1] 101 102 103 104 105 106 107
#建立商品列表索引
index<-function(x) which(items %in% x)
data<-ddply(train,.(user,item,pref),summarize,idx=index(item)) > data
user item pref idx 1 1 101 5.0 1 2 1 102 3.0 2 3 1 103 2.5 3 4 2 101 2.0 1 5 2 102 2.5 2 6 2 103 5.0 3 7 2 104 2.0 4 8 3 101 2.0 1 9 3 104 4.0 4 10 3 105 4.5 5 11 3 107 5.0 7 12 4 101 5.0 1 13 4 103 3.0 3 14 4 104 4.5 4 15 4 106 4.0 6 16 5 101 4.0 1 17 5 102 3.0 2 18 5 103 2.0 3 19 5 104 4.0 4 20 5 105 3.5 5 21 5 106 4.0 6
#同现矩阵
cooccurrence<-function(data){ n<-length(items)
co<-matrix(rep(0,n*n),nrow=n) for(u in users){
idx<-index(data$item[which(data$user==u)])
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
m<-merge(idx,idx) for(i in 1:nrow(m)){
co[m$x[i],m$y[i]]=co[m$x[i],m$y[i]]+1 } }
return(co) }
#推荐算法
recommend<-function(udata=udata,co=coMatrix,num=0){ n<-length(items)
# all of pref pref<-rep(0,n)
pref[udata$idx]<-udata$pref
# 用户评分矩阵
userx<-matrix(pref,nrow=n)
# 同现矩阵*评分矩阵 r<-co %*% userx
# 推荐结果排序 r[udata$idx]<-0
idx<-order(r,decreasing=TRUE)
topn<-data.frame(user=rep(udata$user[1],length(idx)),item=items[idx],val=r[idx]) topn<-topn[which(topn$val>0),]
# 推荐结果取前num个 if(num>0){
topn<-head(topn,num) }
#返回结果 return(topn) }
#生成同现矩阵
co<-cooccurrence(data) > co
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 5 3 4 4 2 2 1 [2,] 3 3 3 2 1 1 0
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
[3,] 4 3 4 3 1 2 0 [4,] 4 2 3 4 2 2 1 [5,] 2 1 1 2 2 1 1 [6,] 2 1 2 2 1 2 0 [7,] 1 0 0 1 1 0 1
#计算推荐结果
recommendation<-data.frame() for(i in 1:length(users)){
udata<-data[which(data$user==users[i]),]
recommendation<-rbind(recommendation,recommend(udata,co,0)) }
> recommendation user item val 1 1 104 33.5 2 1 106 18.0 3 1 105 15.5 4 1 107 5.0 5 2 106 20.5 6 2 105 15.5 7 2 107 4.0 8 3 103 24.5 9 3 102 18.5 10 3 106 16.5 11 4 102 37.0 12 4 105 26.0 13 4 107 9.5 14 5 107 11.5
6.2.3 R基于Hadoop分步式程序实现
R语言实现的MapReduce算法,可以基于R的数据对象实现,不必如JAVA一样使用文本存储。
算法思想同上面R语言实现思想,略有复杂。 算法的思想:
1. 建立物品的同现矩阵
1) 按用户分组,得到所有物品出现的组合列表。 2) 对物品组合列表进行计数,建立物品的同现矩阵 2. 建立用户对物品的评分矩阵 3. 合并同现矩阵和评分矩阵
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
4. 计算推荐结果列表
5. 按输入格式得到推荐评分列表
通过MapReduce实现时,所有操作都要使用Map和Reduce的任务完成,程序实现过程略有变化。
文字说明部分:
1. 建立物品的同现矩阵
1) 按用户分组,得到所有物品出现的组合列表。 key:物品列表向量 val:物品组合向量
$key
[1] 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 102 102 102 102 [20] 102 102 102 103 103 103 103 103 103 103 103 103 103 103 104 104 104 104 104 [39] 104 104 104 104 104 104 104 105 105 105 105 106 106 106 106 107 107 107 107
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
[58] 101 101 101 101 101 101 102 102 102 102 102 102 103 103 103 103 103 103 104 [77] 104 104 104 104 104 105 105 105 105 105 105 106 106 106 106 106 106 $val
[1] 101 102 103 101 102 103 104 101 104 105 107 101 103 104 106 101 102 103 101 [20] 102 103 104 101 102 103 101 102 103 104 101 103 104 106 101 102 103 104 101 [39] 104 105 107 101 103 104 106 101 104 105 107 101 103 104 106 101 104 105 107 [58] 101 102 103 104 105 106 101 102 103 104 105 106 101 102 103 104 105 106 101 [77] 102 103 104 105 106 101 102 103 104 105 106 101 102 103 104 105 106
2) 对物品组合列表进行计数,建立物品的同现矩阵 key:物品列表向量
val:同现矩阵的数据框值(item,item,Freq)
矩阵格式,要与”2. 建立用户对物品的评分矩阵”的格式一致,把异构的两种数据源,合并为同一种数据格式,为”3. 合并同现矩阵和评分矩阵”做数据基础。
$key
[1] 101 101 101 101 101 101 101 102 102 102 102 102 102 103 103 103 103 103 103 [20] 104 104 104 104 104 104 104 105 105 105 105 105 105 105 106 106 106 106 106 [39] 106 107 107 107 107 $val k v freq 1 101 101 5 2 101 102 3 3 101 103 4 4 101 104 4 5 101 105 2 6 101 106 2 7 101 107 1 8 102 101 3 9 102 102 3 10 102 103 3 11 102 104 2 12 102 105 1 13 102 106 1 14 103 101 4 15 103 102 3 16 103 103 4 17 103 104 3 18 103 105 1 19 103 106 2 20 104 101 4 21 104 102 2
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
23 104 104 4 24 104 105 2 25 104 106 2 26 104 107 1 27 105 101 2 28 105 102 1 29 105 103 1 30 105 104 2 31 105 105 2 32 105 106 1 33 105 107 1 34 106 101 2 35 106 102 1 36 106 103 2 37 106 104 2 38 106 105 1 39 106 106 2 40 107 101 1 41 107 104 1 42 107 105 1 43 107 107 1
2. 建立用户对物品的评分矩阵 key:物品列表
val:用户对物品打分矩阵
矩阵格式,要与”2) 对物品组合列表进行计数,建立物品的同现矩阵”的格式一致,把异构的两种数据源,合并为同一种数据格式,为”3. 合并同现矩阵和评分矩阵”做数据基础
$key
[1] 101 101 101 101 101 102 102 102 103 103 103 103 104 104 104 104 105 105 106 [20] 106 107 $val
item user pref 1 101 1 5.0 2 101 2 2.0 3 101 3 2.0 4 101 4 5.0 5 101 5 4.0 6 102 1 3.0 7 102 2 2.5 8 102 5 3.0 9 103 1 2.5
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
11 103 4 3.0 12 103 5 2.0 13 104 2 2.0 14 104 3 4.0 15 104 4 4.5 16 104 5 4.0 17 105 3 4.5 18 105 5 3.5 19 106 4 4.0 20 106 5 4.0 21 107 3 5.0
3. 合并同现矩阵和评分矩阵
这一步操作是MapReduce比较特殊的,因为数据源是两个异构数据源,进行MapReduce的操作。
在之前,我们已经把两种格式合并为一样的。使用equijoin这个rmr2包的函数,进行矩阵合并。 key:NULL val:合并的数据框
$key NULL $val
k.l v.l freq.l item.r user.r pref.r 1 103 101 4 103 1 2.5 2 103 102 3 103 1 2.5 3 103 103 4 103 1 2.5 4 103 104 3 103 1 2.5 5 103 105 1 103 1 2.5 6 103 106 2 103 1 2.5 7 103 101 4 103 2 5.0 8 103 102 3 103 2 5.0 9 103 103 4 103 2 5.0 10 103 104 3 103 2 5.0 11 103 105 1 103 2 5.0 12 103 106 2 103 2 5.0 13 103 101 4 103 4 3.0 ....
4. 计算推荐结果列表
把第三步中的矩阵,进行合并计算,得到推荐结果列表 key:物品列表 val:推荐结果数据框
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
$key
[1] 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 [19] 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 102 [37] 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 103 [55] 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 103 [73] 103 103 103 103 103 104 104 104 104 104 104 104 104 104 104 104 104 104 [91] 104 104 104 104 104 104 104 104 104 104 104 104 104 104 104 105 105 105 [109] 105 105 105 105 105 105 105 105 105 105 105 106 106 106 106 106 106 106 [127] 106 106 106 106 106 107 107 107 107 $val
k.l v.l user.r v 1 101 101 1 25.0 2 101 101 2 10.0 3 101 101 3 10.0 4 101 101 4 25.0 5 101 101 5 20.0 6 101 102 1 15.0 7 101 102 2 6.0 8 101 102 3 6.0 9 101 102 4 15.0 10 101 102 5 12.0 11 101 103 1 20.0 12 101 103 2 8.0 13 101 103 3 8.0 14 101 103 4 20.0 15 101 103 5 16.0 16 101 104 1 20.0 17 101 104 2 8.0 18 101 104 3 8.0 ....
5. 按输入格式得到推荐评分列表
对推荐结果列表,进行排序处理,输出排序后的推荐结果。 key:用户ID val:推荐结果数据框
$key
[1] 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5 $val
user item pref 1 1 101 44.0
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
2 1 103 39.0 3 1 104 33.5 4 1 102 31.5 5 1 106 18.0 6 1 105 15.5 7 1 107 5.0 8 2 101 45.5 9 2 103 41.5 10 2 104 36.0 11 2 102 32.5 12 2 106 20.5 13 2 105 15.5 14 2 107 4.0 15 3 101 40.0 16 3 104 38.0 17 3 105 26.0 18 3 103 24.5 19 3 102 18.5 20 3 106 16.5 21 3 107 15.5 22 4 101 63.0 23 4 104 55.0 24 4 103 53.5 25 4 102 37.0 26 4 106 33.0 27 4 105 26.0 28 4 107 9.5 29 5 101 68.0 30 5 104 59.0 31 5 103 56.5 32 5 102 42.5 33 5 106 34.5 34 5 105 32.0 35 5 107 11.5
rmr2使用提示:
1) rmr.options(backend = hadoop )
这里backend有两个值,hadoop,local。hadoop是默认值,使用hadoop环境运行程序。local是一个本地测试的设置,已经不建议再使用。我在开发时,试过local设置,运行速度非常快,模拟了hadoop的运行环境。但是,local模式下的代码,不能和hadoop模式下完全兼容,变动也比较大,因此不建议大家使用。 2) equijoin(…,outer=c( left ))
这里outer包括了4个值,c(“”, “left”, “right”, “full”),非常像数据库中两个表的join操作
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
3) keyval(k,v)
mapReduce的操作,需要key和valve保存数据。如果直接输出,或者输出的未加key,会有一个警告Converting to.dfs argument to keyval with a NULL key。再上一篇文章中,rmr2的例子中就有类似的情况,请大家注意修改代码。
> to.dfs(1:10)
Warning message:
In to.dfs(1:10) : Converting to.dfs argument to keyval with a NULL key
代码部分:
#加载rmr2包 library(rmr2)
#输入数据文件
train<-read.csv(file="small.csv",header=FALSE) names(train)<-c("user","item","pref")
#使用rmr的hadoop格式,hadoop是默认设置。 rmr.options(backend = 'hadoop')
#把数据集存入HDFS
train.hdfs = to.dfs(keyval(train$user,train)) from.dfs(train.hdfs)
> from.dfs(train.hdfs)
13/04/07 14:35:44 INFO util.NativeCodeLoader: Loaded the native-hadoop library 13/04/07 14:35:44 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
13/04/07 14:35:44 INFO compress.CodecPool: Got brand-new decompressor $key
[1] 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 5 5
$val
user item pref 1 1 101 5.0 2 1 102 3.0 3 1 103 2.5 4 2 101 2.0 5 2 102 2.5 6 2 103 5.0 7 2 104 2.0 8 3 101 2.0
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
9 3 104 4.0 10 3 105 4.5 11 3 107 5.0 12 4 101 5.0 13 4 103 3.0 14 4 104 4.5 15 4 106 4.0 16 5 101 4.0 17 5 102 3.0 18 5 103 2.0 19 5 104 4.0 20 5 105 3.5 21 5 106 4.0
#STEP 1, 建立物品的同现矩阵
# 1) 按用户分组,得到所有物品出现的组合列表。 train.mr<-mapreduce( train.hdfs,
map = function(k, v) { keyval(k,v$item) }
,reduce=function(k,v){ m<-merge(v,v) keyval(m$x,m$y) } )
from.dfs(train.mr)
$key
[1] 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 102 102 102 102 [20] 102 102 102 103 103 103 103 103 103 103 103 103 103 103 104 104 104 104 104 [39] 104 104 104 104 104 104 104 105 105 105 105 106 106 106 106 107 107 107 107 [58] 101 101 101 101 101 101 102 102 102 102 102 102 103 103 103 103 103 103 104 [77] 104 104 104 104 104 105 105 105 105 105 105 106 106 106 106 106 106
$val
[1] 101 102 103 101 102 103 104 101 104 105 107 101 103 104 106 101 102 103 101 [20] 102 103 104 101 102 103 101 102 103 104 101 103 104 106 101 102 103 104 101 [39] 104 105 107 101 103 104 106 101 104 105 107 101 103 104 106 101 104 105 107 [58] 101 102 103 104 105 106 101 102 103 104 105 106 101 102 103 104 105 106 101 [77] 102 103 104 105 106 101 102 103 104 105 106 101 102 103 104 105 106
# 2) 对物品组合列表进行计数,建立物品的同现矩阵
详细介绍R+Hadoop系统结构、案例以及优缺点分析等
step2.mr<-mapreduce( train.mr,
map = function(k, v) { d<-data.frame(k,v)
d2<-ddply(d,.(k,v),count)
key<-d2$k val<-d2
keyval(key,val) } )
from.dfs(step2.mr)
$key
[1] 101 101 101 101 101 101 101 102 102 102 102 102 102 103 103 103 103 103 103 [20] 104 104 104 104 104 104 104 105 105 105 105 105 105 105 106 106 106 106 106 [39] 106 107 107 107 107
$val
k v freq 1 101 101 5 2 101 102 3 3 101 103 4 4 101 104 4 5 101 105 2 6 101 106 2 7 101 107 1 8 102 101 3 9 102 102 3 10 102 103 3 11 102 104 2 12 102 105 1 13 102 106 1 14 103 101 4 15 103 102 3 16 103 103 4 17 103 104 3 18 103 105 1 19 103 106 2 20 104 101 4 21 104 102 2 22 104 103 3 23 104 104 4 24 104 105 2
正在阅读:
《管理学》期末考试复习范围(简答OK)05-12
山东省滕州市夏庄镇17届高三生物一轮复习第二周自测题05-12
均衡普惠创特色 促进教育大发展05-12
投保申请书08-22
一,名词解释(每小题4分,共16分)05-12
2016年住建部监理工程师继续教育考试题电力专业70分10-04
春天的畅想作文400字07-16
冰川地貌分类05-12
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 数据挖掘
- 资料收集
- RhadoopV
- 工具
- 1.0
- 群控电梯调度算法
- 上海市青年文明号创建工作手册2012
- 配电网预规讲稿09..
- 2016年监理工程师(机电安装工程)延续注册考试题及答案(82分)
- 英语专业名词(水利方面)
- 开关插座接线 墙壁开关插座怎么接线
- 工程施工战略合作框架协议
- 初中安全教育主题班会教案-校园安全主题班会
- Arduino手把手系列教程
- 对沁阳市紫陵-葛村沁河公路大桥桥位河段防洪影响评价
- 初中音乐理论欣赏知识
- 商务礼仪与谈判论文
- OB IC+Mosfet 变压器设计计算
- 网吧常见漏洞及利用方法
- ZigBee 无线通讯技术之设计与应用
- 电加热器的多档位问题
- 2007年法律顾问资格考试综合法律知识试卷-中大网校
- 2016年第44届世赛浙江省选拔赛管道与制暖项目技术文件
- 北二外翻硕(MTI)考研复试分数线如何预防变化
- 幼儿园教师专业标准(试行)