package com.ontology2.bakemono.sumRDF;
import com.ontology2.bakemono.primitiveTriples.PrimitiveTriple;
import com.ontology2.bakemono.primitiveTriples.PrimitiveTripleCodec;
import org.apache.hadoop.io.FloatWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class SumRDFMapper extends Mapper<LongWritable,Text,Text,FloatWritable> {
PrimitiveTripleCodec ptc=new PrimitiveTripleCodec();
private final String activePredicate="<http://www.yahoo.com/>";
@Override
protected void map(LongWritable key,Text value,Context context) throws IOException,InterruptedException {
PrimitiveTriple t=ptc.decode(value.toString());
if(t.getPredicate().equals("<http://rdf.basekb.com/public/subjectiveEye3D>")) {
String number=getQuoteContents(t.getObject());
if(number!=null) {
float numericValue=Float.parseFloat(number);
context.write(new Text(t.getSubject()),new FloatWritable(numericValue));
}
}
}
// Notably not smart about \ characters (which don't exist in the
// numeric cases we're handling)
public static String getQuoteContents(String q) {
int leftQ=q.indexOf('"');
if(leftQ!=0)
return null;
int rightQ=q.indexOf('"', leftQ+ 1);
if(rightQ<0)
return null;
return q.substring(leftQ+1,rightQ-leftQ);
}
}