package com.ontology2.bakemono.joins; import com.google.common.collect.Iterators; import com.google.common.collect.PeekingIterator; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.VIntWritable; import org.apache.hadoop.io.WritableComparable; import org.apache.hadoop.mapreduce.Reducer; import java.io.IOException; public class AcceptWithMatchingKeyReducer<K extends WritableComparable, V extends WritableComparable> extends Reducer<TaggedItem<K>, TaggedItem<V>, NullWritable, V> { final static VIntWritable ONE = new VIntWritable(1); final static VIntWritable TWO = new VIntWritable(2); @Override protected void reduce(TaggedItem<K> key, Iterable<TaggedItem<V>> values, Context context) throws IOException, InterruptedException { PeekingIterator<TaggedItem<V>> pi = Iterators.peekingIterator(values.iterator()); boolean foundObject = false; while (pi.hasNext() && pi.peek().getTag().equals(ONE)) { pi.next(); foundObject = true; } if(foundObject) { while (pi.hasNext()) { TaggedItem<V> that = pi.next(); context.write(null, that.getKey()); } } } }