mapreduce 计算excel_MapReduce实现大矩阵乘法

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 {

public static HashMap features = new HashMap();

public void configure(JobConf job) {

super.configure(job);

}

public void map(LongWritable key, Text value, OutputCollector 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 {

public void reduce(Text key, Iterator values,

OutputCollector 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)));

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值