<强> java矩阵乘法的mapreduce程序实现强>
映射函数:对于矩阵M中的每个元素M (ij),产生一系列的键-值对& lt; (i (k) (M, j, M (ij))在
其中k=1、2 .....知道矩阵N的总列数,对于矩阵N中的每个元素N (jk),产生一系列的键-值对& lt; (i (k), (j N (jk)祝辞,其中我=1,2 .......直到我=1,2 .......直到矩阵M的总列数。
<强> map 强>
包com.cb.matrix; 进口静态org.mockito.Matchers.intThat; 进口java.io.IOException; 进口org.apache.hadoop.conf.Configuration; 进口org.apache.hadoop.io.Text; 进口org.apache.hadoop.mapred.FileSplit; 进口org.apache.hadoop.mapreduce.Mapper; 进口com.sun.org.apache.bcel.internal.generic.NEW; 公共类MatrixMapper Mapper<延伸;对象,文本,文本,Text>{ 私人文本map_key=new Text (); 私人文本map_value=https://www.yisu.com/zixun/new文本(); 私人int columnN; 私人int rowM;/* * *执行地图()函数前先由conf.get()得到主函数中提供的必要变量 *也就是从输入文件名中得到的矩阵维度信息 */@Override 保护空白设置(Mapper> <对象、文本、文本、文本。上下文语境)抛出IOException InterruptedException {//TODO自动生成方法存根 配置配置=context.getConfiguration (); columnN=Integer.parseInt (config.get (columnN ")); rowM=Integer.parseInt (config.get (rowM ")); } @Override 保护空白地图(对象键,文本值,Mapper<对象,文本,文本,Text>。上下文语境) 抛出IOException InterruptedException {//TODO自动生成方法存根//得到文件名,从而区分输入矩阵M和N 文件分割器文件分割器=(文件分割器)context.getInputSplit (); 字符串文件名=fileSplit.getPath () . getname (); 如果(fileName.contains (“M”)) { String[]元组=value.toString () .split (", "); int i=Integer.parseInt(元组[0]); String[]元组(tuple [1] .split (“\ t”); int j=Integer.parseInt(元组[0]); int Mij=Integer.parseInt(元组[1]); (int k=1; k< columnN + 1; k + +) { map_key.set (i +”、“+ k); map_value.set (“M”+”、“+ j +”、“+ Mij); 上下文。写(map_key map_value); } } else if (fileName.contains (“N”)) { String[]元组=value.toString () .split (", "); int j=Integer.parseInt(元组[0]); String[]元组(tuple [1] .split (“\ t”); int k=Integer.parseInt(元组[0]); int Njk=Integer.parseInt(元组[1]); for (int i=1; i< rowM + 1;我+ +){ map_key.set (i +”、“+ k); map_value.set (“N”+”、“+ j +”、“+ Njk); 上下文。写(map_key map_value); } } } } >之前<强>减少函数强>:对于每个键(i (k)相关联的值(M, j, M (ij))及(j N, N (jk)),根据相同的j值将M (ij)和N (jk)分别存入不同的数组中,然后将俩者的第j个元素抽取出来分别相乘,最后相加,即可得到p (jk)的值。
<强>减速器强>
包com.cb.matrix; 进口java.io.IOException; 进口org.apache.hadoop.conf.Configuration; 进口org.apache.hadoop.io.Text; 进口org.apache.hadoop.mapreduce.Reducer; 公共类MatrixReducer Reducer<延伸;文本,文本,文本,Text>{ 私人int和=0; 私人int columnM; @Override 保护空白设置(Reducer<文本,文本,文本,Text>。上下文语境)抛出IOException InterruptedException {//TODO自动生成方法存根 配置配置=context.getConfiguration (); columnM=Integer.parseInt (conf.get (columnM ")); } @Override 保护孔隙减少(文本arg0, Iterable__arg1 Reducer<文本,文本,文本,Text>。上下文最长) 抛出IOException InterruptedException {//TODO自动生成方法存根 int [] M=new int [columnM + 1]; int [] N=new int [columnM + 1]; (文本val: __arg1) { String[]元组=val.toString () .split (", "); 如果(元组[0].equals (“M”)) { M [Integer.parseInt(元组[1])]=Integer.parseInt(元组[2]); 其他}{ N [Integer.parseInt(元组[1]))=Integer.parseInt(元组[2]); } for (int j=1; j 之前 ,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
java矩阵乘法的mapreduce程序实现