大矩阵乘法运算map reduce实现思路

实现思路:

存储:

大矩阵很多都是稀疏矩阵,并且有可能有上百万的行和上百万的列。

那么矩阵可以存在类似HBase面向列的分布式数据库中。

假设HTable中有两个表A和表B分别存储两个巨型矩阵a和b。表A和表B都是只有一个列族。列名都是1开始计数。

那么表A和表B所存储的矩阵a和矩阵b表示为如下形式:

矩阵a(m,n):

a11 a12 a13 ...   a1n

a21 a22 a23 ...   a2n

...

...

...

am1 am2 am3 ...   amn

 

矩阵b(n,k):

b11 b12 b13 ...   b1k

b21 b22 b23 ...   b2k

...

...

...

bn1 bn2 bn3 ...   bnk

 

计算:A*B = C

计算可以通过mapreduce这种分布式计算模型来计算。

Map阶段:

1、  从hbase中读取a表的数据aij,将其拆成k条<key,value>形式,其中key为<i,[1-k]>的键值对。Value为<0,j,aij>键值对。之所以这样做是因为aij在计算矩阵乘法过程中会被使用l次。而key值及是其对应的结果矩阵C中的下标。其中0代表该值来自A矩阵。

2、  从hbase中读取b表的数据bij,将其拆成m条<key,value>形式,其中key为<[1-m],j>的键值对。Value为<1,i,bij>键值对。之所以这样做是因为bij在计算矩阵乘法过程中会被使用l次。而key值及是其对应的结果矩阵C中的下标。其中1代表该值来自B矩阵。

 

Reduce阶段:

Shuffle以后会形成<key,List<value>>键值对,其中key 为<i,j>键值对,代表C矩阵下标。

值为<[0-1],[1-n],数值> 三元组。如果第一个数是0则表示来自矩阵A,如果是1表示来自矩阵B。这样根据第一个数的值将List<value>分成两组。然后第二个值相同的两个value对应的三元组中的最后一个数值两两相乘并求和。即可求出C每个元素的值。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值