package mil.nga.giat.geowave.analytic.mapreduce;
import java.io.DataOutputStream;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.RecordWriter;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class DoubleOutputFormat<K, V> extends
FileOutputFormat<K, V>
{
protected static class DoubleRecordWriter<K, V> extends
RecordWriter<K, V>
{
protected DataOutputStream out;
public DoubleRecordWriter(
final DataOutputStream out ) {
super();
this.out = out;
}
@Override
public synchronized void write(
final K key,
final V value )
throws IOException {
if ((value != null) && !(value instanceof NullWritable)) {
out.writeDouble(((DoubleWritable) value).get());
}
}
@Override
public synchronized void close(
final TaskAttemptContext context )
throws IOException {
out.close();
}
}
@Override
public RecordWriter<K, V> getRecordWriter(
final TaskAttemptContext job )
throws IOException,
InterruptedException {
final Configuration conf = job.getConfiguration();
final Path file = getDefaultWorkFile(
job,
"");
final FileSystem fs = file.getFileSystem(conf);
final FSDataOutputStream fileOut = fs.create(
file,
false);
return new DoubleRecordWriter<K, V>(
fileOut);
}
}