java矩阵乘法的mapreduce程序实现

  

<强> 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程序实现