基于MapReduce的大矩阵乘法(Spark实现)

矩阵-向量乘法实现

\[x_i=\sum_{j=1}^nm_{ij}v_{j}\]

Map函数

Map函数应用于M的一个元素,但是如果执行Map任务的计算节点还没有将v读到内存,那么首先以一个整体的方式读入v,然后v就可以被该Map任务中执行的Map函数所用。每个Map任务将整个向量v和矩阵M的一个文件块作为输入。对每个矩阵元素\(m_{ij}\),Map任务会产生键值对\((i,m_{ij}v_{j})\)。因此,计算\(x_i\)的所有n个求和项\(m_{ij}v_j\)

Reduce函数

Reduce函数简单地将所有与给定键i关联的值相加即得到结果\((i,x_i)\)

向量v太大无法放入内存

把矩阵分割成多个宽度相等的垂直条,同时将向量分割成同样数目的水平条。我们的目标是使用足够的条以保证向量的每个条能够方便地放入计算节点的内存中。

矩阵-矩阵乘法

矩阵\(M\)中第\(i\)行第\(j\)列的元素记为\(m_{ij}\),矩阵\(N\)中第\(j\)行第\(k\)列的元素记为\(n_{jk}\),矩阵\(P=MN\),其第\(i\)行第\(k\)列的元素记为\(p_{ik}\)

\[p_{ik}=\sum_jm_{ij}n_{jk}\]

Map函数

对每个矩阵元素\(m_{ij}\)产生键值对\((j,(M,i,m_{ij}))\),对每个矩阵元素\(n_{jk}\)产生键值对\((j,(N,k,n_{jk}))\)

Reduce函数

对每个键\(j\),对每个\((M,i,m_{ij})\)\((N,k,n_{jk})\),产生键值对,其中键为\((i,k)\),值为\(m_{ij}n_{jk}\)

Reduce函数

对每个键\((i, k)\),计算与此键相关联的所有值的和,记为\(((i,k),v)\)

以下是使用Spark来实现上面矩阵与矩阵相乘的算法,输入是一份文件,文件的每一行为矩阵名 行号 列号 值

1036292-20161207190607897-1414095516.png

转载于:https://www.cnblogs.com/fang-jie/articles/6138789.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值