Package com.ontology2.bakemono.primitiveTriples

Source Code of com.ontology2.bakemono.primitiveTriples.PrimitiveTripleOutputFormat

package com.ontology2.bakemono.primitiveTriples;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;

import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.io.compress.GzipCodec;
import org.apache.hadoop.mapreduce.RecordWriter;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.ReflectionUtils;
import org.openjena.riot.out.SinkTripleOutput;

import com.ontology2.bakemono.jena.TripleOutputFormat.TripleRecordWriter;

abstract public class PrimitiveTripleOutputFormat<K,V> extends FileOutputFormat<K, V> {

    public class TripleRecordWriter extends RecordWriter<K, V> {

        private final OutputStream innerOutput;
        private final PrintWriter innerWriter;
        private final PrimitiveTripleCodec ptc=new PrimitiveTripleCodec();

        public TripleRecordWriter(OutputStream innerOutput) {
            this.innerOutput=innerOutput;
            this.innerWriter=new PrintWriter(innerOutput);
        }
        @Override
        public void write(K key, V value) throws IOException {
            innerWriter.println(ptc.encode(makeTriple(key,value)));
        }

        @Override
        public void close(TaskAttemptContext context) throws IOException,
        InterruptedException {
            innerWriter.close();
            innerOutput.close();
        }

    }

    abstract protected PrimitiveTriple makeTriple(K key, V value);
   
    @Override
    public RecordWriter<K, V> getRecordWriter(TaskAttemptContext ctx) throws IOException {
        return new TripleRecordWriter(createRawOutputStream(ctx));

    }

    private OutputStream createRawOutputStream(
            TaskAttemptContext ctx) throws IOException {
        boolean isCompressed = getCompressOutput(ctx);

        if (!isCompressed) {
            Path file = getDefaultWorkFile(ctx, ".nt");
            FileSystem fs = file.getFileSystem(ctx.getConfiguration());
            return fs.create(file, false);
        } else {
            Class<? extends CompressionCodec> codecClass =
                    getOutputCompressorClass(ctx, GzipCodec.class);

            CompressionCodec codec = ReflectionUtils.newInstance(codecClass, ctx.getConfiguration());
            Path file =  getDefaultWorkFile(ctx, ".nt"+codec.getDefaultExtension());
            FileSystem fs = file.getFileSystem(ctx.getConfiguration());
            FSDataOutputStream fileOut = fs.create(file, false);
            return codec.createOutputStream(fileOut);
        }
    }
}
TOP

Related Classes of com.ontology2.bakemono.primitiveTriples.PrimitiveTripleOutputFormat

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.