矩阵乘法的并行计算最早被用于Google提出的PageRank算法中包含的迭代乘法运算,也可高效执行大矩阵间的相乘运算。
1. 实验准备
由于Hadoop与Spark对于矩阵乘法的实现过程不同,这里分别使用Linux Shell生成随机的对应于Hadoop与Spark算法的输入矩阵文件,其中输入文件名均以“矩阵名_行值_列值”格式命名,执行shell脚本所需要的参数有矩阵的行值,列值以及矩阵
的列值。
对于Hadoop输入矩阵,文件中每行数据包含矩阵元素的行列信息及具体值。对应shell脚本如下:
#! /bin/bash
for i in `seq 1 $1`
do
for j in `seq 1 $2`
do
s=$((RANDOM % 100))
echo -e "$i,$j\t$s" >> M_$1_$2
done
done
for j in `seq 1 $2`
do
for k in `seq 1 $3`
do
s=$((RANDOM % 100))
echo -e "$j,$k\t$s" >> N_$2_$3
done
done
对于Spark输入矩阵,输入文件命名与Hadoop一致,其中矩阵以原始行列格式保存在文件中,矩阵
以列为单位,将所有元素以空格分开作为一行保存在文件中。对应shell脚本如下:
#! /bin/bash
for i in `seq 1 $1`
do
for j in `seq 1 $2`
do
s[$j]=$((RANDOM % 100))
done
echo "${s[*]}" >> M_$1_$2
done
for j in `seq 1 $2`
do
for k in `seq 1 $3`
do
s[$k]=$((RANDOM % 100))
done
echo -e "${s[*]} \c" >> N_$2_$3
done
2. Hadoop实现
回顾矩阵乘法的过程,假设有矩阵与矩阵