基于mapreduce框架的超大规模稀疏矩阵乘法运算的方法

文档序号:6640748阅读:360来源:国知局
基于mapreduce框架的超大规模稀疏矩阵乘法运算的方法
【专利摘要】一种基于mapreduce框架下的大规模稀疏矩阵乘法运算的方法,所述算法由2个mapreduce的job完成,对矩阵A和矩阵B的元素进行正确的分组,使得矩阵A的第i列的元素与矩阵B的第k行的元素进入到同一个reduce的group中,并对该group中每一个来自A的元素和来自B的元素做一次乘积。本发明只需要2个mapreduce操作就可以完成超大规模系数矩阵的乘法,减少算法的运行步骤和时间,本发明降低了对机器内存的要求,只需要机器能用hashmap存储矩阵A的每一行即可进行。
【专利说明】基于mapreduce框架的超大规模稀疏矩阵乘法运算的方法

【技术领域】
[0001]本申请涉及一种矩阵乘法,具体的,涉及一种基于mapreduce框架的超大规模稀疏矩阵乘法运算的方法。

【背景技术】
[0002]矩阵乘法是线性代数中常见的问题之一,许多数值计算问题都包含着矩阵乘法的计算。因此,提高矩阵乘法算法运行速度问题,多年来一直引起算法研究者们的高度重视。在现有技术CN201310033884.6中,提出了一种将大矩阵乘法问题转换为适合mapreduce的操作,解决大规模矩阵乘法运算因为维度过大,在单机环境下因资源限制导致执行性能低下甚至无法执行的问题。但该操作需要4个mapreduce的job才能完成,仍然占据较大的内存和计算量,因此,如何能够减少计算量,更为快速有效的完成矩阵乘法的操作运算,便成为现有技术亟待解决的技术问题。


【发明内容】

[0003]本发明的目的在于提出一种基于mapreduce框架的超大规模稀疏矩阵乘法运算的方法,使得能够只需要2个mapreduce操作就可以完成超大规模系数矩阵的乘法,减少算法的运行步骤和时间。
[0004]为达此目的,本发明采用以下技术方案:
一种基于mapreduce框架下的大规模稀疏矩阵乘法运算的方法,即求矩阵C,使得C=A*B,其中A的存储格式为(i,k,Aik),B的存储格式为(k,j,Bkj),C的存储格式为(i, j, Cij),其中I彡i彡m, I彡k彡n, I ^ j ^ I,所述算法由2个mapreduce的job完成,包括如下步骤:
步骤1:第一个job,该job需要两个mapper和I个reduce完成:
(i)生成mapperl:对矩阵A的每一个元素(i,k, Aik),输出一个key-value对,mapper I 的 key 和 value 分别为 key-value 对的形式,其中,key 为(k, A’ ), value 为(i,Aik), A’为常数,表示属于矩阵A;
(ii)生成mapper2:对矩阵B的每一个元素(k,j,Bkj),输出一个key-value对,mapper2 的 key 和 value 分别为 key-value 对的形式,其中,key 为(k, B”),value 为(j,Bkj),B”为常数,表示属于矩阵B;
(iii)partit1ner:将 mapperl 和 mapper2 输出的 key-value 对按照 key 中的key-value 对中的 key 的 hash 进行 partit1n ;
(iv)groupingComprator:将 mapperl 和 mapper2 输出的 key-value 对按照 key 中的key-value对中的key进行分组;
(V) reduce: 对reduce的每一个分组,声明两个hashmap,记为hashmapA和hashmapB,对 mapperl 和 mapper2 中的每一个 value,将所述 value 所米用的 key-value对放到hashmap,如果mapperl和mapper2中的所述value对应的key的value是A’ ,则将mapperl和mapper2中的所述value放到hashmapA中,如果mapperl和mapper2中的所述value对应key的value是B”,则将其放到hashmapB中,由于在mapperl和mapper2中,所述value采用的是key-value对的形式,则,所述hashmapA和hashmapB中的key为所述 mapper 的 value 的 key, value 为所述 mapper 的 value 的 value ;
(vi)对hashmapA的每一个兀素(keyA, valueA)和hashmapB的每一个兀素(keyB, valueB)做运算,输出一个 key-value 对,其中 key 为(keyA, keyB) , value 为valueA*valueB ;
步骤2:第二个job,该job由一个mapper和一个reduce完成,
(i)mapper:对每一个元素之间输出原样输出
(ii)reducer:对key相同的元素进行分组,对值进行累加。
[0005]因此,本发明对矩阵A和矩阵B的元素进行正确的分组,使得矩阵A的第i列的元素与矩阵B的第k行的元素进入到同一个reduce的group中,并对该group中每一个来自A的元素和来自B的元素做一次乘积。
[0006]本发明只需要2个mapreduce操作就可以完成超大规模系数矩阵的乘法,减少算法的运行步骤和时间,并且本发明降低了对机器内存的要求,只需要机器能用hashmap存储矩阵A的每一行即可进行。

【专利附图】

【附图说明】
[0007]图1是根据本发明的实施例对基于mapreduce框架的超大规模稀疏矩阵利用两个job进行计算的示意图。

【具体实施方式】
[0008]下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
[0009]本发明应用于mapreduce框架下的大规模稀疏矩阵乘法运算的方法,即求矩阵C,使得C=A*B,其中A的存储格式为(i,k,Aik),B的存储格式为(k,j,Bkj),C的存储格式为(i, j, Cij),其中 1彡;[彡1]1,I ^ k ^ n, I ^ j ^ L.整个算法由 2 个 mapreduce 的 job完成:
步骤1:第一个job,该job需要两个mapper和I个reduce完成:
(i)生成mapperl:对矩阵A的每一个元素(i,k, Aik),输出一个key-value对,mapperl 的 key 和 value 分别为 key-value 对的形式,其中,key 为(k, A’ ), value 为(i,Aik), A’为常数,表示属于矩阵A;
(ii)生成mapper2:对矩阵B的每一个元素(k,j,Bkj),输出一个key-value对,mapper2 的 key 和 value 分别为 key-value 对的形式,其中,key 为(k, B”),value 为(j,Bkj),B”为常数,表示属于矩阵B;
(iii)partit1ner:将 mapperl 和 mapper2 输出的 key-value 对按照 key 中的key-value 对中的 key 的 hash 进行 partit1n ;
(iv)group ingComprator:将 mapperl 和 mapper2 输出的 key-value 对按照 key 中的key-value对中的key进行分组;
本领域技术人员能够明白,步骤I中的(iii)和(iv)均为mapreduce运算中的常规步骤。
[0010](V) reduce:对 reduce 的每一个分组,声明两个 hashmap,记为 hashmapA 和hashmapB,对 mapperl 和 mapper2 中的每一个 value,将所述 value 所米用的 key-value对放到hashmap,如果mapperl和mapper2中的所述value对应的key的value是A’ ,则将mapperl和mapper2中的所述value放到hashmapA中,如果mapperl和mapper2中的所述value对应key的value是B”,则将其放到hashmapB中,由于在mapperl和mapper2中,所述value采用的是key-value对的形式,贝U,所述hashmapA和hashmapB中的key为所述 mapper 的 value 的 key, value 为所述 mapper 的 value 的 value ;
也就是说,放入到所述hashmapA中的key-value对应当为mappl中的(i, Aik),放入hashmapB 中的 key-value 对应当为 mapp2 中的(j, Bkj)。
[0011](vi)对 hashmapA 的每一个兀素(keyA, valueA)和 hashmapB 的每一个兀素(keyB, valueB)做运算,输出一个 key-value 对,其中 key 为(keyA, keyB) , value 为valueA*valueB ;
例如,在hashmapA中具有兀素(3,5), hashmapB中具有兀素(5,7),则生成key-value对,其中 key 为(3,5) ,value 为 35,即(3,5,35);
(2)第二个job,该job由一个mapper和一个reduce完成
(i)mapper:对每一个元素之间输出原样输出
(ii)reducer:对key相同的元素进行分组,对值进行累加。
[0012]例如,存在两个元素(3,5,35)和(3,5,41),则按相同的(3,5)进行分组,对35和41进行累加,得到(3,5,76)。
[0013]本发明对矩阵A和矩阵B的元素进行正确的分组,使得矩阵A的第i列的元素与矩阵B的第k行的元素进入到同一个reduce的group中,并对该group中每一个来自A的元素和来自B的元素做一次乘积。
[0014]本发明只需要2个mapreduce操作就可以完成超大规模系数矩阵的乘法,减少算法的运行步骤和时间,并且本发明降低了对机器内存的要求,只需要机器能用hashmap存储矩阵A的每一行即可进行。
[0015]以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的【具体实施方式】仅限于此,对于本发明所属【技术领域】的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单的推演或替换,都应当视为属于本发明由所提交的权利要求书确定保护范围。
【权利要求】
1.一种基于mapreduce框架下的大规模稀疏矩阵乘法运算的方法,即求矩阵C,使得C=A*B,其中A的存储格式为(i,k,Aik),B的存储格式为(k,j,Bkj),C的存储格式为(i,j,C^.),其中 1 < i < m,1 < k < n,1 < j < 1,所述算法由 2 个 mapreduce 的 job 完成,包括如下步骤: 步骤1:第一个job,该job需要两个mapper和1个reduce完成: ⑴生成mapperl:对矩阵A的每一个元素(i,k,Aik),输出一个key-value对,mapperl 的 key 和 value 分别为 key-value 对的形式,其中,key 为(k,A’),value 为(i,Aik),A’为常数,表示属于矩阵A; (?)生成mapper2:对矩阵B的每一个元素(k,j,Bkj),输出一个key-value对,mapper2 的 key 和 value 分别为 key-value 对的形式,其中,key 为(k,B”),value 为(j,Bkj),B”为常数,表示属于矩阵B; (iii)partit1ner:将 mapperl 和 mapper2 输出的 key-value 对按照 key 中的key-value 对中的 key 的 hash 进行 partit1n ;
(iv)groupingComprator:将 mapperl 和 mapper2 输出的 key-value 对按照 key 中的key-value对中的key进行分组; (v)reduce: 对reduce的每一个分组,声明两个hashmap,记为hashmapA和hashmapB,对 mapperl 和 mapper2 中的每一个 value,将所述 value 所米用的 key-value对放到hashmap,如果mapperl和mapper2中的所述value对应的key的value是A’,则将mapperl和mapper2中的所述value放到hashmapA中,如果mapperl和mapper2中的所述value对应key的value是B”,则将其放到hashmapB中,由于在mapperl和mapper2中,所述value釆用的是key-value对的形式,则,所述hashmapA和hashmapB中的key为所述 mapper 的 value 的 key, value 为所述 mapper 的 value 的 value ; (vi)对hashmapA的每一个兀素(keyA,valueA)和hashmapB的每一个兀素(keyB, valueB)做运算,输出一个 key-value 对,其中 key 为(keyA, keyB),value 为valueA^valueB ; 步骤2:第二个job,该job由一个mapper和一个reduce完成, (i)mapper:对每一个元素之间输出原样输出 (ii)reducer:对key相同的元素进行分组,对值进行累加。
【文档编号】G06F17/16GK104462023SQ201410845357
【公开日】2015年3月25日 申请日期:2014年12月31日 优先权日:2014年12月31日
【发明者】蒋伟, 姚键, 潘柏宇, 卢述奇 申请人:合一网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1