package tap.core.mapreduce.input;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileSplit;
import org.apache.hadoop.mapred.InputSplit;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.RecordReader;
import org.apache.hadoop.mapred.Reporter;
import tap.core.io.BinaryKey;
import tap.core.mapreduce.io.BinaryWritable;
import tap.util.Protobufs;
import tap.util.TypeRef;
import com.google.protobuf.Message;
public class TapfileInputFormat<M extends Message> extends FileInputFormat<BinaryKey, BinaryWritable<M>>{
private TypeRef<M> typeRef;
@SuppressWarnings("rawtypes")
public static <M extends Message> Class<TapfileInputFormat>
getInputFormatClass(Class<M> protoClass, Configuration job) {
Protobufs.setClassConf(job, TapfileInputFormat.class, protoClass);
return TapfileInputFormat.class;
}
@SuppressWarnings("deprecation")
@Override
public RecordReader<BinaryKey, BinaryWritable<M>> getRecordReader(
InputSplit genericSplit, JobConf job, Reporter reporter) throws IOException {
if (typeRef == null) {
typeRef = Protobufs.getTypeRef(job, TapfileInputFormat.class);
}
return new TapfileRecordReader<M>(job, (FileSplit) genericSplit, typeRef);
}
}