package edu.isi.karma.mapreduce.tripleparser;
import java.io.IOException;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import edu.isi.karma.util.RandomGUID;
public class TripleReducer extends
Reducer<Text, NullWritable, Text, Text> {
@Override
public void reduce(Text key, Iterable<NullWritable> values, Context context)
throws IOException, InterruptedException {
String triple = key.toString();
if (triple.length() == 0) return;
String[] parts = triple.split("\\|\\|\\|");
if (parts == null || parts.length != 3) return;
String relationship;
String source = parts[0]; //subject
String predicate = parts[1]; //predicate
String target;
String object = parts[2];
String literalValue;
String prefix = "Literal:";
if (object.startsWith(prefix)) { // object is literal
target = new RandomGUID().toString();
literalValue = object.substring(prefix.length());
} else {
target = object;
literalValue = "";
}
relationship = source + "\t" + predicate + "\t" + target;
context.write(new Text(relationship), new Text(literalValue));
}
}