矩阵P=MN,p_ik=sum_{j}m_ij*n_jk,把矩阵M看成关系R(I,J,V),把矩阵N看成关系R(J,K,W).
M,N有公共属性J,M中每个元组(i,j,v)N中的每个元组(j,k,w),两个关系的自然链接会产生元组(i,j,k,v*w),接下来进行分组聚合运算,
也就是矩阵乘法能用两步串联的Map-Reduce实现。
Map函数:将每个矩阵元素m_ij传给键值对(j,(M,i,m_ij)),将每个矩阵元素n_jk传给键值对(j,(N,k,n_jk))。
Reduce函数:对每个键j,检查与之关联的值的列表。对每个来自M的值(M,i,m_ij)和来自N的值(N,k,n_jk),产生元组(i,k,m_ij,n_jk).
对于键j,Reduce函数输出满足(i,k,m_ij*n_jk)的所有元组列表作为值。
Map函数:第一步的输出结果传递给该Map函数,这些结果的形式为(j,[(i_1,k_1,v_1),(i_2,k_2,v_2),...,(i_p,k_p,v_p)]),其中每个
v_q对应m_{i_qj}和n_{jk_q}的乘积。
基于该元素可以产生p个键值对((i_1,k_1),v_1),((i_2,k_2),v_2),...,((i_p,k_p),v_p).
Reduce函数:对每个键(i,k),计算与此键关联的所有值的和,结果记为((i,k),v),其中v是矩阵P=MN的第i行第k列的元素值。


雷达卡


京公网安备 11010802022788号







