参考: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. 用 Java 技术创建 RESTful Web 服务

    JAX-RS:一种更为简单.可移植性更好的替代方式 JAX-RS (JSR-311) 是一种 Java™ API,可使 Java Restful 服务的开发变得迅速而轻松.这个 API 提供了一种基于 ...

  2. spring-boot4

    1.1.1. Starter pom 除了官方也有其他第三方提供的starter Websocket是服务端推数据到客户端.长连接. 1.1.1.Xml 配置文件 有些时候必须使用xml配置. 1.1 ...

  3. 【leetcode刷题笔记】Add Binary

    Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...

  4. android6.0 外部存储设备插拔广播以及获取路径(U盘)【转】

    本文转载自:https://blog.csdn.net/zhouchengxi/article/details/53982222 这里我将U盘作为例子来说明解析. android4.1版本时U盘插拔时 ...

  5. vRA7.x services do not register after a restart (2147446)

    After restarting the vRealize Automation Appliance, you experience these symptoms: In the vRealize A ...

  6. docker仓库及数据卷

    docker help rmi, 删除本地镜像 docker run -it --name=centos centos:latest /bin/sh  --name的选项可以方便我们以后引用此imag ...

  7. Spark持久化策略

    spark持久化策略_缓存优化persist.cache都是持久化到内存缓存策略 StorageLevel_useDisk:是否使用磁盘_useMemory:是否使用内存_useOffHeap:不用堆 ...

  8. 仿联想商城laravel实战---3、前端页面搭建(什么情况下需要路由接参数)

    仿联想商城laravel实战---3.前端页面搭建(什么情况下需要路由接参数) 一.总结 一句话总结: 比如访问课程的时候,不同的课程(比如云知梦),比如访问不同的商品,比如访问不同的分类 //商品详 ...

  9. asp.net中关于《%=》《%#》《%》 的用法——(转帖)

    1:在.aspx页面,<% %>标签相当于在.cs页面的代码,也就是说你在.cs文件里面怎样写,就可以在.aspx文件里面的<% %>标签里面怎样写. 2:在.aspx页面,& ...

  10. Django-02

    知识预览 Ajax前戏:json Ajax简介 jquery实现的ajax JS实现的ajax 回到顶部 Ajax前戏:json 什么是json? 定义: JSON(JavaScript Object ...