大数据分析--MapReduce(二)

参考斯坦福大学的数据挖掘教材《 M i n i n g   o f   M a s s i v e   D a t a s e t s Mining \ of \ Massive \ Datasets Mining of Massive Datasets》,里面介绍了以下一些 M a p R e d u c e MapReduce MapReduce算法的应用

矩阵-向量乘积

假设我们有一个 n ∗ n n * n nn的矩阵 M M M,它第 i i i行第 j j j列的元素我们称为 m i j m_{ij} mij,同时我们有一个 n n n维向量 v v v。那么他们的乘积我们可以记作 X X X,其中 x i = ∑ j = 1 n m i j v j x_i=\sum_{j=1}^nm_{ij}v_j xi=j=1nmijvj。当 n n n比较小时,我们并不会用到 M a p R e d u c e MapReduce MapReduce,当矩阵的维度大到机器的主存都放不下的时候,我们就需要 M a p R e d u c e MapReduce MapReduce出手相助了。

Map Tasks

我们假设主存能够放下矩阵的一行和被乘向量 v v v(其实这是理所当然的,还没听说过哪一个数据的维度让32GB的主存都放不下),那么,我们的map就可以向reduce机器输出 ( i , m i j v j ) (i, m_{ij}v_j) (i,mijvj)的键值对(根据前面 x i = ∑ j = 1 n m i j v j x_i=\sum_{j=1}^nm_{ij}v_j xi=j=1nmijvj设计)

Reduce Tasks

我们根据键值 i i i把所有 m i j v j m_{ij}v_j mijvj进行求和,输出 ( i , x i ) (i, x_i) (i,xi)即可。

万一…

万一真的有数据让主存存下矩阵一行后,无法存下完整的向量 v v v该怎么办呢?这时候,我们就可以把矩阵和向量拆分成更小的块,然后设计编号,再求和就行了。具体细节就不展开了。

关系代数

学过数据库的小伙伴们应该知道,数据库里有一种很常见的那就是关系型数据库。这是一种建立在关系代数运算基础上的数据库。我们知道,数据库存储的数据通常是相当庞大的,那么数据库进行的关系运算常常也会需要用到 M a p R e d u c e MapReduce MapReduce

选择运算

选择运算就是选择出符合关系表达式的数据。比如, σ A = ′ b ′ \sigma_{A='b'} σA=b表达的意思就是选择出在属性 A A A上值为 b b b的元组。那么这个应该如何做呢?其实很简单

Map Tasks

map阶段,根据条件 A = ′ b ′ A='b' A=b筛选出符合关系的元组 t t t,生成键值对 ( t , t ) (t, t) (t,t)

Reduce Tasks

把map送来的结果直接输出就好。

并不是多此一举!!!前文有提到,这样能并行运算提高效率。

投影运算

投影运算,就是把一整张表的指定属性列取出来,并做去重。比如 π s \pi_s πs,假定 S S S属性里面有[1, 1, 2, 3 ,4],那么投影的结果就是[1, 2, 3, 4]。

Map Tasks

还是对属性里存在的元组输出键值对 ( t 1 , t 1 ) (t^1, t^1) (t1,t1) t 1 t^1 t1表示在属性列上的投影元组,与整个元组 t t t区分开。

Reduce Tasks

对Map发来的键值对分组,每组变成 ( t 1 , [ t 1 , t 1 . . . ] ) (t^1, [t^1, t^1...]) (t1,[t1,t1...]),在这之后,对存在的组别,输出 t 1 t^1 t1即可。

并集,交集,差集运算

这几个运算比较简单,讲一下大致的思路。假设我们要求若干个集合的交并差,Map阶段可以输出 ( t , i d x ) (t, idx) (t,idx),即元组加上集合编号。Reduce阶段对键进行组合后,得到若干 ( t , [ 1 , 2 ] ) (t, [1, 2]) (t,[1,2]) ( t , [ 2 , 4 ] ) (t, [2, 4]) (t,[2,4])这种的元组。如果取并集,我们就挑选全部的元组输出,取交则挑选第二项包含全部序号的元组输出,取差则是挑选第二项只包含被减集合序号的元组输出。

自然连接运算

自然连接就是把两张表 R R R S S S在他们公共的属性组上进行等值连接。

Map Tasks

我们假定公共属性集为 B B B,关系 R ( A , B ) R(A, B) R(A,B), 关系 S ( B , C ) S(B, C) S(B,C),在Map阶段,我们模仿交并运算的思路,可以输出 ( b , ( R , a ) ) (b, (R, a)) (b,(R,a)) ( b , ( S , c ) ) (b, (S, c)) (b,(S,c))这样的键值对

Reduce Tasks

我们按找键值整理,挑选 ( b , [ ( R , a ) , ( S , c ) ] ) (b, [(R, a), (S, c)]) (b,[(R,a),(S,c)])这样的组别进行连接输出即可

聚集统计运算

同样的,怎么利用MapReduce求最大值,最小值和平均值呢?我们留给读者自行思考。

  • 25
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值