矩陣P=MN,p_ik=sum_{j}m_ij*n_jk,把矩陣M看成關(guān)系R(I,J,V),把矩陣N看成關(guān)系R(J,K,W).
M,N有公共屬性J,M中每個元組(i,j,v)N中的每個元組(j,k,w),兩個關(guān)系的自然鏈接會產(chǎn)生元組(i,j,k,v*w),接下來進(jìn)行分組聚合運算,
也就是矩陣乘法能用兩步串聯(lián)的Map-Reduce實現(xiàn)。
Map函數(shù):將每個矩陣元素m_ij傳給鍵值對(j,(M,i,m_ij)),將每個矩陣元素n_jk傳給鍵值對(j,(N,k,n_jk))。
Reduce函數(shù):對每個鍵j,檢查與之關(guān)聯(lián)的值的列表。對每個來自M的值(M,i,m_ij)和來自N的值(N,k,n_jk),產(chǎn)生元組(i,k,m_ij,n_jk).
對于鍵j,Reduce函數(shù)輸出滿足(i,k,m_ij*n_jk)的所有元組列表作為值。
Map函數(shù):第一步的輸出結(jié)果傳遞給該Map函數(shù),這些結(jié)果的形式為(j,[(i_1,k_1,v_1),(i_2,k_2,v_2),...,(i_p,k_p,v_p)]),其中每個
v_q對應(yīng)m_{i_qj}和n_{jk_q}的乘積。
基于該元素可以產(chǎn)生p個鍵值對((i_1,k_1),v_1),((i_2,k_2),v_2),...,((i_p,k_p),v_p).
Reduce函數(shù):對每個鍵(i,k),計算與此鍵關(guān)聯(lián)的所有值的和,結(jié)果記為((i,k),v),其中v是矩陣P=MN的第i行第k列的元素值。