hadoop/mapreduce-矩阵乘法的实现代码下载

最近在研究hadoop与mapReduce,网上教程只有个wordcount程序示范,太简单,故写了个相对复杂点的涉及到多个文件之间同时运算的矩阵乘法的代码用于实验与测试,供大家学习与参考。

下载地址:
http://download.csdn.net/detail/statdm/4395736

调用方法:

执行:hadoop jar matrix.jar com.baosight.mapred.test.MatrixMulti left:/tmp/a right:/tmp/b output:/tmp/c leftprefix:000000_ rightprefix:000000_

>参数1:left:左矩阵路径

>参数2:right:右矩阵路径

>参数3:output:左矩阵乘右矩阵结果路径

>参数4:leftprefix:左矩阵文件前缀

如/tmp/a/000000_0,000000_1,000000_2……的000000_

>参数5:rightprefix:右矩阵文件前缀

>左右矩阵按列存储,每个文件只存放一列值,如2x2的单位矩阵, 000000_0存放1 0

000000_1存放

0 1

代码示范:

package com.baosight.mapred.test;

import java.io.IOException;
import java.util.ArrayList;

import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reporter;

public class MatrixMapper extends MapReduceBase implements Mapper<MapInputKey,MapInputValue,ReduceInputKey,DoubleWritable>{

	@Override
	public void map(MapInputKey key, MapInputValue value,
			OutputCollector<ReduceInputKey, DoubleWritable> output,
			Reporter reporter) throws IOException {
		
		ArrayList<Double> leftElements = value.leftMatrixColumn;
		ArrayList<Double> rightElements = value.rightMatrixColumn;
		int leftColNum = key.leftColNum;
		int rightColNum = key.rightColNum;
		for(int i = 0; i < leftElements.size();i++){
			Double leftVal = leftElements.get(i);
			Double rightVal = rightElements.get(leftColNum);
			ReduceInputKey tempKey = new ReduceInputKey();
			tempKey.row = i;
			tempKey.col = rightColNum;
//			output.collect(tempKey, new DoubleWritable(leftVal.doubleValue()*rightVal.doubleValue()));
			output.collect(tempKey, new DoubleWritable(leftVal*rightVal));
		}
		
	}

}




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值