package com.movie.step;
import java.io.IOException;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.InputSplit;
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.output.FileOutputFormat;
import com.movie.arith.Recommend;
/**
* combine source data
*
* @author yourkkc the matrix of user to score to movies;
*
* yong hu ju zheng
*/
public class UserMatrix {
// input collect
public static class TheMapper extends Mapper<Object, Text, Text, Text> {
private final static Text k = new Text();
private final static Text v = new Text();
@Override
protected void map(Object key, Text value, Mapper<Object, Text, Text, Text>.Context context)
throws IOException, InterruptedException {
FileSplit inputSplit = (FileSplit) context.getInputSplit();
String txtName = inputSplit.getPath().getName();
int itemId = Integer.parseInt(txtName.substring(3, txtName.length() - 4));
String[] token = value.toString().split(",");
if (token.length > 1) {// like userID itemID:score:time
k.set(Integer.parseInt(token[0]) + "");
v.set(itemId + ":" + token[1] + ":" + token[2]);
context.write(k, v);
}
}
}
public static class TheReduce extends Reducer<Text, Text, Text, Text> {
private final static Text v = new Text();
@Override
protected void reduce(Text k, Iterable<Text> values, Reducer<Text, Text, Text, Text>.Context context)
throws IOException, InterruptedException {
StringBuffer sBuffer = new StringBuffer();
for (Text value : values) {
sBuffer.append("," + value.toString());
}
v.set(sBuffer.toString().replaceFirst(",", ""));// userID
// itemID:score:time,itemID:score:item
context.write(k, v);
}
}
public static class TheMapper1 extends Mapper<Object, Text, Text, Text> {
private final static Text k = new Text();
private final static Text v = new Text();
@Override
protected void map(Object key, Text value, Mapper<Object, Text, Text, Text>.Context context)
throws IOException, InterruptedException {
FileSplit inputSplit = (FileSplit) context.getInputSplit();
String txtName = inputSplit.getPath().getName();
int itemId = Integer.parseInt(txtName.substring(3, txtName.length() - 4));
String[] token = value.toString().split(",");
if (token.length > 1) {// like userID itemID:score:time
k.set(Integer.parseInt(token[0]) + "");
v.set(itemId + ":" + token[1]);
context.write(k, v);
}
}
}
public static class TheReduce1 extends Reducer<Text, Text, Text, Text> {
@Override
protected void reduce(Text k, Iterable<Text> values, Reducer<Text, Text, Text, Text>.Context context)
throws IOException, InterruptedException {
StringBuffer sBuffer = new StringBuffer();
for (Text value : values) {
context.write(k, value);
}
}
}
}