参考:http://blog.csdn.net/xyilu/article/details/9066973文章

文字未得及得总结,明天再写文字,先贴代码

package matrix;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map; import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.RunningJob;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
public class SparseMatrix { public static class SparseMatrixMapper extends Mapper<LongWritable, Text, Text, Text> { private String flag;// A同现矩阵 or B评分矩阵 @Override
protected void setup(Context context) throws IOException, InterruptedException {
FileSplit split = (FileSplit) context.getInputSplit();
flag = split.getPath().getName();// 判断读的数据集 // System.out.println(flag);
}
private static final int rowNum = 4;// 矩阵A的行数
public static final int colA=3; //矩阵A的列数,B的行数
private static final int colNum = 2;// 矩阵B的列数 @Override
public void map(LongWritable key, Text values, Context context) throws IOException, InterruptedException { String str=values.toString();
String[] line=Recommend.DELIMITER.split(str);
if(line.length==0)return;
if(flag.equals("a.txt")){
if(line.length!=3)return;
String row=line[0];
String col=line[1];
String val=line[2];
Text k=new Text();
Text v=new Text();
for(int i=1;i<=colNum;i++){
k.set(row+","+i);
v.set("a,"+col+","+val);
System.out.println(k.toString()+" "+v.toString());
context.write(k, v);
}
}
if(flag.equals("b.txt")){
String row=line[0];
String col=line[1];
String val=line[2];
Text k=new Text();
Text v=new Text();
for(int i=1;i<=rowNum;i++){
k.set(i+","+col);
v.set("b,"+row+","+val);
context.write(k, v);
System.out.println(k.toString()+" "+v.toString());
}
} } }
public static class SparseMatrixReducer extends Reducer<Text, Text, Text, Text> {
@Override
public void reduce(Text key,Iterable<Text> values, Context context) throws IOException, InterruptedException {
Map<String,Double> map=new HashMap<String ,Double>();
Double[] A=new Double[SparseMatrixMapper.colA];
Double[] B=new Double[SparseMatrixMapper.colA];
for(int i=0;i<A.length;i++){
A[i]=0.0;
B[i]=0.0;
}
for(Text line:values){
String val=line.toString();
if(val.contains("a")){
String[] arr=Recommend.DELIMITER.split(val);
int n=Integer.valueOf(arr[1]);
A[n-1]=Double.valueOf(arr[2]);
}
else if(val.contains("b")){
String[] arr=Recommend.DELIMITER.split(val);
int n=Integer.valueOf(arr[1]);
B[n-1]=Double.valueOf(arr[2]);
}
}
Double sum=0.0;
for(int i=0;i<SparseMatrixMapper.colA;i++){
sum=sum+A[i]*B[i];
}
Text v=new Text();
v.set(sum.toString());
context.write(key, v); }
}
public static void run(Map<String, String> path) throws IOException, InterruptedException, ClassNotFoundException {
JobConf conf = Recommend.config(); String input1 = path.get("matrixMult"); String output = path.get("matrixMultOut"); HdfsDAO hdfs = new HdfsDAO(Recommend.HDFS, conf); hdfs.rmr(output);
hdfs.rmr(input1);
hdfs.mkdirs(input1);
hdfs.copyFile("datafile/week5/SparseMatrix/a.txt", input1);
hdfs.copyFile("datafile/week5/SparseMatrix/b.txt", input1);
Job job = new Job(conf);
job.setJarByClass(SparseMatrix.class); job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class); job.setMapperClass(SparseMatrixMapper.class);
job.setReducerClass(SparseMatrixReducer.class); job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class); FileInputFormat.setInputPaths(job, new Path(input1));
FileOutputFormat.setOutputPath(job, new Path(output)); job.waitForCompletion(true);
}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

基于MapReduce的矩阵乘法的更多相关文章

  1. 【甘道夫】MapReduce实现矩阵乘法--实现代码

    之前写了一篇分析MapReduce实现矩阵乘法算法的文章: [甘道夫]Mapreduce实现矩阵乘法的算法思路 为了让大家更直观的了解程序运行,今天编写了实现代码供大家參考. 编程环境: java v ...

  2. MapReduce实现矩阵乘法

    简单回想一下矩阵乘法: 矩阵乘法要求左矩阵的列数与右矩阵的行数相等.m×n的矩阵A,与n×p的矩阵B相乘,结果为m×p的矩阵C.具体内容能够查看:矩阵乘法. 为了方便描写叙述,先进行如果: 矩阵A的行 ...

  3. 基于OpenMP的矩阵乘法实现及效率提升分析

    一.  矩阵乘法串行实现 例子选择两个1024*1024的矩阵相乘,根据矩阵乘法运算得到运算结果.其中,两个矩阵中的数为double类型,初值由随机数函数产生.代码如下: #include <i ...

  4. 基于MapReduce的矩阵乘法运算

    1.采用两个MapReduce运算串联来实现 Pik= Mij*Njk 第一步: Map函数:将每个矩阵运算mij传给键值对(j,(M,i,mij)),将每个矩阵元素njk传给键值对(j,(N,k,n ...

  5. mapreduce 实现矩阵乘法

    import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs ...

  6. 【BZOJ-4386】Wycieczki DP + 矩阵乘法

    4386: [POI2015]Wycieczki Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 197  Solved: 49[Submit][Sta ...

  7. Python+MapReduce实现矩阵相乘

    算法原理 map阶段 在map阶段,需要做的是进行数据准备.把来自矩阵A的元素aij,标识成p条<key, value>的形式,key="i,k",(其中k=1,2,. ...

  8. 矩阵乘法的MapReduce实现

    对于任意矩阵M和N,若矩阵M的列数等于矩阵N的行数,则记M和N的乘积为P=M*N,其中mik 记做矩阵M的第i行和第k列,nkj记做矩阵N的第k行和第j列,则矩阵P中,第i行第j列的元素可表示为公式( ...

  9. MapReduce实现大矩阵乘法

    来自:http://blog.csdn.net/xyilu/article/details/9066973 引言 何 为大矩阵?Excel.SPSS,甚至SAS处理不了或者处理起来非常困难,需要设计巧 ...

随机推荐

  1. Data Structure Binary Tree: Construct Full Binary Tree from given preorder and postorder traversals

    http://www.geeksforgeeks.org/full-and-complete-binary-tree-from-given-preorder-and-postorder-travers ...

  2. ICP 求解相机思路

    1.之前仍然是需要创建find_feature_matches,和pixel2cam,一个是用来匹配描述子的,一个是把像素坐标转成归一化平面坐标的.里面的变量都要带上&.2.因为是3d-3d. ...

  3. Hadoop 2.x简介

    Hadoop 2.0产生背景 Hadoop1.0中HDFS和MapReduce在高可用.扩展性等方面存在问题 HDFS存在的问题 NameNode单点故障,难以应用于在线场景 NameNode压力过大 ...

  4. 分享知识-快乐自己:HTTP 响应码

    状态码 含义 100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应.服务器必须在 ...

  5. poj 3666 Making the Grade(dp离散化)

    Making the Grade Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7068   Accepted: 3265 ...

  6. appium-DesiredCapability详解与实战

    DesiredCapability对启动app至关重要,是启动app前的准备工作.如果配置错误,app不会成功启动. DesiredCapability有appium公共健值对.Android专有和I ...

  7. Java_基础_02_ThreadLocal

    二.参考资料 1.ThreadLocal 那点事儿 2.彻底理解ThreadLocal

  8. 1_Command 游戏开发命令模式

    A dead simple implementation looks like: ``` // simple void InputHandler::handleInput() { if (isPres ...

  9. java String final + equal == 区别

    java String 是不可改变的类型. String a = "hello2"; String d = "hello"; final String b = ...

  10. hsv空间

    hsv在不同的软件中,有不同的阈值, 在描述阈值之前,看一下它的定义,按照标准的定义,hsv应该是从0°到360°的一个环,加上一个表示亮度的轴,重点就是那个环. 这个环如图一,0°一般为红色120° ...