MapReduce实现大矩阵乘法
引言
- 大矩阵如何存储?
- 计算模型如何设计?
- 矩阵维度如何传递给乘法运算?
数据准备
存储方式
1 2 2
1 3 3
2 1 4
2 2 5
3 1 7
3 2 8
3 3 9
4 1 10
4 2 11
4 3 12
1 2 15
2 2 2
3 1 11
3 2 9
计算模型
- 当前的<key, list(value)>对是为了计算的哪个元素?
- list中的每个value是来自表或表的哪个位置?
代码
- import java.io.IOException;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.StringTokenizer;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.io.LongWritable;
- import org.apache.hadoop.io.Text;
- import org.apache.hadoop.io.Writable;
- import org.apache.hadoop.io.WritableComparable;
- import org.apache.hadoop.mapred.FileSplit;
- import org.apache.hadoop.mapred.JobConf;
- import org.apache.hadoop.mapred.MapReduceBase;
- import org.apache.hadoop.mapred.Mapper;
- import org.apache.hadoop.mapred.OutputCollector;
- import org.apache.hadoop.mapred.RecordWriter;
- import org.apache.hadoop.mapred.Reducer;
- import org.apache.hadoop.mapred.Reporter;
- import org.apache.hadoop.mapred.TextOutputFormat;
- import org.apache.hadoop.mapred.lib.MultipleOutputFormat;
- import org.apache.hadoop.util.Progressable;
- public class Bigmmult {
- public static final String CONTROL_I = "\u0009";
- public static final int MATRIX_I = 4;
- public static final int MATRIX_J = 3;
- public static final int MATRIX_K = 2;
- public static String makeKey(String[] tokens, String separator) {
- StringBuffer sb = new StringBuffer();
- boolean isFirst = true;
- for (String token : tokens) {
- if (isFirst)
- isFirst = false;
- else
- sb.append(separator);
- sb.append(token);
- }
- return sb.toString();
- }
- public static class MapClass extends MapReduceBase implements
- Mapper<LongWritable, Text, Text, Text> {
- public static HashMap<String , Double> features = new HashMap<String, Double>();
- public void configure(JobConf job) {
- super.configure(job);
- }
- public void map(LongWritable key, Text value, OutputCollector<Text, Text> output,
- Reporter reporter) throws IOException, ClassCastException {
- // 获取输入文件的全路径和名称
- String pathName = ((FileSplit)reporter.getInputSplit()).getPath().toString();
- if (pathName.contains("m_ys_lab_bigmmult_a")) {
- String line = value.toString();
- if (line == null || line.equals("")) return;
- String[] values = line.split(CONTROL_I);
- if (values.length < 3) return;
- String rowindex = values[0];
- String colindex = values[1];
- String elevalue = values[2];
- for (int i = 1; i <= MATRIX_K; i ++) {
- output.collect(new Text(rowindex + CONTROL_I + i), new Text("a#"+colindex+"#"+elevalue));
- }
- }
- if (pathName.contains("m_ys_lab_bigmmult_b")) {
- String line = value.toString();
- if (line == null || line.equals("")) return;
- String[] values = line.split(CONTROL_I);
- if (values.length < 3) return;
- String rowindex = values[0];
- String colindex = values[1];
- String elevalue = values[2];
- for (int i = 1; i <= MATRIX_I; i ++) {
- output.collect(new Text(i + CONTROL_I + colindex), new Text("b#"+rowindex+"#"+elevalue));
- }
- }
- }
- }
- public static class Reduce extends MapReduceBase
- implements Reducer<Text, Text, Text, Text> {
- public void reduce(Text key, Iterator<Text> values,
- OutputCollector<Text, Text> output, Reporter reporter)
- throws IOException {
- int[] valA = new int[MATRIX_J];
- int[] valB = new int[MATRIX_J];
- int i;
- for (i = 0; i < MATRIX_J; i ++) {
- valA[i] = 0;
- valB[i] = 0;
- }
- while (values.hasNext()) {
- String value = values.next().toString();
- if (value.startsWith("a#")) {
- StringTokenizer token = new StringTokenizer(value, "#");
- String[] temp = new String[3];
- int k = 0;
- while(token.hasMoreTokens()) {
- temp[k] = token.nextToken();
- k++;
- }
- valA[Integer.parseInt(temp[1])-1] = Integer.parseInt(temp[2]);
- } else if (value.startsWith("b#")) {
- StringTokenizer token = new StringTokenizer(value, "#");
- String[] temp = new String[3];
- int k = 0;
- while(token.hasMoreTokens()) {
- temp[k] = token.nextToken();
- k++;
- }
- valB[Integer.parseInt(temp[1])-1] = Integer.parseInt(temp[2]);
- }
- }
- int result = 0;
- for (i = 0; i < MATRIX_J; i ++) {
- result += valA[i] * valB[i];
- }
- output.collect(key, new Text(Integer.toString(result)));
- }
- }
- }
MapReduce实现大矩阵乘法相关推荐
- 大数据Mapreduce编程——矩阵乘法
编程要求 完成矩阵乘法的 Map 函数和 Reduce 函数 1.设计两个矩阵(3050,50100),在每个单元格中填入一个 0-99 的随机数,并写入 两个文件中,作为 Map 函数的输入 2.测 ...
- 5位无符号阵列乘法器设计_可变位宽的大规模矩阵乘法方法
引言 本文介绍了一种数据位宽可变的乘法方法,由于避免了DSP的使用,可以充分利用LUT资源,在DSP数量少的芯片上也可以获得很高的计算量.这种方法更适合大矩阵乘法,矩阵越大,计算效率就会越高. 01 ...
- 用MapReduce实现矩阵乘法
主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项 ...
- 循环取矩阵的某行_1.2 震惊! 某大二本科生写的矩阵乘法吊打Mathematica-线性代数库BLAS-矩阵 (上)...
本文是 1. 线性代数库BLASzhuanlan.zhihu.com 系列的第二篇, 将讲述矩阵类的结构和矩阵基础运算的AVX2加速算法. 1. 矩阵类的结构 在讲述矩阵各种算法之前很有必要详解一下 ...
- 单轮MapReduce的矩阵乘法
http://blog.sina.com.cn/s/blog_62186b460101ai1x.html 矩阵的乘法只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有定义.一 ...
- 稀疏矩阵加法运算_1.2 震惊! 某大二本科生写的矩阵乘法吊打Mathematica-线性代数库BLAS-矩阵 (上)...
本文是 1. 线性代数库BLASzhuanlan.zhihu.com 系列的第二篇, 将讲述矩阵类的结构和矩阵基础运算的AVX2加速算法. 1. 矩阵类的结构 在讲述矩阵各种算法之前很有必要详解一下 ...
- 【甘道夫】MapReduce实现矩阵乘法--实现代码
之前写了一篇分析MapReduce实现矩阵乘法算法的文章: [甘道夫]Mapreduce实现矩阵乘法的算法思路 为了让大家更直观的了解程序运行,今天编写了实现代码供大家參考. 编程环境: java v ...
- 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍
用于大型Transformer的8-bit矩阵乘法介绍 原文地址:A Gentle Introduction to 8-bit Matrix Multiplication for transforme ...
- THUSCH 2017 大魔法师(矩阵乘法+线段树)
题意 https://loj.ac/problem/2980 思路 区间修改考虑用线段树维护.由于一段区间的 \(A,B,C\) 可以表示成由原来的 \(A,B,C\) 乘上带上系数再加上某一个某个常 ...
- 编码分布式矩阵乘法(Coded Distributed Matrix Multiplication, CDMM)问题简单介绍
许多现代分布式计算框架都会遇到大规模分布式矩阵乘法问题,即计算两个大规模矩阵和的乘积,如MapReduce.Spark.由于分布式计算系统会出现的无法预测的时延,主节点(master node)必须等 ...
最新文章
- 自动驾驶十字路口解决方案
- 涨点明显 | 全面刷新COCO检测和分割Top-1(附论文下载)
- Yongkil Kwon:EOS具有当今世界上最多中心化的协议 | 独家专访
- List<Map<String, Object>>——多层嵌套的数据结构
- IBASE component valid to field
- P1332,nssl1316-血色先锋军【bfs】
- 【记录】IDEA未正确关闭导致打开报错,进不了主界面,含解决办法
- Linux调整时区和同步时间
- ORA-00257: 归档程序错误。在释放之前仅限于内部连接
- java获取指定属性名_获取指定属性名的属性值简易方法
- OBS-RTMP推流
- 表格操作系列——字段名与字段别名的获取
- SparseLDA算法
- python编写登录脚本_python实现的登录和操作开心网脚本分享
- 基于反步法backstepping的自适应控制简介
- 不可思议有氧机器人_不思议迷宫奇怪的机器人 不思议迷宫奇怪的机器人获取方式一览...
- 扫雷——完整版!!!!!!
- pygal优雅地添加数据
- Windows XP系统正版验证出现的黑屏解决方法
- etal中间有空格吗_科学网—英文论文中i.e.,e.g.,etc.,viz.的简要小结 - 贾琼的博文...
热门文章
- Xcode6无法安装VVDocumenter插件的解决方法
- javascript 计时器,消失计时器
- 很犀利却很现实的26句话!哪句你心痛了
- 你真的输不起了,别再孩子气了
- android禁止wifi,android – 防止WiFi-direct在不使用时关闭
- bootstrap bootstraptable 固定列_初识Bootstrap
- mysql text 性能_MySQL - text 性能优化--记录一
- 【2019上海网络赛:K】Peekaboo(勾股数知c求a和b--数论)
- 【codeup22562】最长回文子串(dp基础题)
- mplab java失败_【超菜鸟求助】编译时失败,以下是显示内容。