You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by rv...@apache.org on 2014/04/02 11:20:58 UTC

svn commit: r1583942 [1/9] - in /jena/Experimental/hadoop-rdf: ./ hadoop-rdf-common/ hadoop-rdf-common/src/ hadoop-rdf-common/src/main/ hadoop-rdf-common/src/main/java/ hadoop-rdf-common/src/main/java/com/ hadoop-rdf-common/src/main/java/com/yarcdata/ ...

Author: rvesse
Date: Wed Apr  2 09:20:51 2014
New Revision: 1583942

URL: http://svn.apache.org/r1583942
Log:
Initial import of Hadoop RDF Tools code which is undergoing IP Clearance process (JENA-666)

Added:
    jena/Experimental/hadoop-rdf/   (with props)
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/   (with props)
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/pom.xml
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/AbstractNodeTupleWritable.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/CharacteristicSetWritable.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/CharacteristicWritable.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/NodeTupleWritable.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/NodeWritable.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/QuadWritable.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/TripleWritable.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/compators/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/compators/NodeComparator.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/resources/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/test/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/test/java/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/test/java/com/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/test/java/com/yarcdata/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/test/java/com/yarcdata/urika/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/test/java/com/yarcdata/urika/hadoop/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/test/java/com/yarcdata/urika/hadoop/rdf/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/test/java/com/yarcdata/urika/hadoop/rdf/io/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/test/java/com/yarcdata/urika/hadoop/rdf/io/types/
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/test/java/com/yarcdata/urika/hadoop/rdf/io/types/CharacteristicTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/test/java/com/yarcdata/urika/hadoop/rdf/io/types/RdfTypesTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/test/resources/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/   (with props)
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/NOTICE
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/pom.xml
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/HadoopIOConstants.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/RdfIOConstants.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/AbstractNLineFileInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/AbstractWholeFileInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/BlockedNQuadsInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/BlockedNTriplesInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/NQuadsInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/NTriplesInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/QuadsInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/RdfJsonInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/RdfXmlInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/TriGInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/TriplesInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/TriplesOrQuadsInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/TurtleInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/WholeFileNQuadsInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/WholeFileNTriplesInputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/AbstractBlockBasedNodeTupleReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/AbstractBlockBasedQuadReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/AbstractBlockBasedTripleReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/AbstractLineBasedNodeTupleReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/AbstractLineBasedQuadReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/AbstractLineBasedTripleReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/AbstractRdfReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/AbstractWholeFileNodeTupleReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/AbstractWholeFileQuadReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/AbstractWholeFileTripleReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/BlockedNQuadsReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/BlockedNTriplesReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/NQuadsReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/NTriplesReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/QuadsReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/RdfJsonReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/RdfXmlReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/TriGReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/TriplesOrQuadsReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/TriplesReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/TriplesToQuadsReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/TurtleReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/WholeFileNQuadsReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/readers/WholeFileNTriplesReader.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/util/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/util/BlockInputStream.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/util/RdfIOUtils.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/util/TrackableInputStream.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/util/TrackedInputStream.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/util/TrackedPipedQuadsStream.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/util/TrackedPipedRDFStream.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/input/util/TrackedPipedTriplesStream.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/AbstractBatchedNodeTupleOutputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/AbstractNodeOutputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/AbstractNodeTupleOutputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/NQuadsOutputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/NTriplesNodeOutputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/NTriplesOutputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/RdfJsonOutputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/RdfXmlOutputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/TriGOutputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/TurtleOutputFormat.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/AbstractBatchedNodeTupleWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/AbstractBatchedQuadWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/AbstractBatchedTripleWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/AbstractLineBasedNodeTupleWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/AbstractLineBasedQuadWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/AbstractLineBasedTripleWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/AbstractNodeWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/AbstractWholeFileNodeTupleWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/AbstractWholeFileQuadWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/AbstractWholeFileTripleWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/NQuadsWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/NTriplesNodeWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/NTriplesWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/RdfJsonWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/RdfXmlWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/TriGWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/java/com/yarcdata/urika/hadoop/rdf/io/output/writers/TurtleWriter.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/main/resources/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/RdfTriplesInputTestMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/AbstractBlockedQuadInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/AbstractBlockedTripleInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/AbstractNodeTupleInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/AbstractQuadsInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/AbstractTriplesInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/AbstractWholeFileQuadInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/AbstractWholeFileTripleInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/BlockedNQuadsInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/BlockedNTriplesInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/NQuadsInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/NTriplesInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/RdfJsonInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/RdfXmlInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/TriGInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/TurtleInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/WholeFileNQuadsInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/WholeFileNTriplesInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/AbstractCompressedNodeTupleInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/AbstractCompressedQuadsInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/AbstractCompressedTriplesInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/AbstractCompressedWholeFileQuadInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/AbstractCompressedWholeFileTripleInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/nquads/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/nquads/AbstractCompressedNQuadsInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/nquads/AbstractCompressedWholeFileNQuadsInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/nquads/BZipppedNQuadsInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/nquads/BZipppedWholeFileNQuadsInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/nquads/DeflatedNQuadsInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/nquads/DeflatedWholeFileNQuadsInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/nquads/GZippedNQuadsInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/nquads/GZippedWholeFileNQuadsInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/ntriples/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/ntriples/AbstractCompressedBlockedNTriplesInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/ntriples/AbstractCompressedNTriplesInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/ntriples/AbstractCompressedWholeFileNTriplesInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/ntriples/BZippedBlockedNTriplesInput.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/ntriples/BZippedNTriplesInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/ntriples/BZippedWholeFileNTriplesInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/ntriples/DeflatedBlockedNTriplesInput.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/ntriples/DeflatedNTriplesInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/ntriples/DeflatedWholeFileNTriplesInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/ntriples/GZippedBlockedNTriplesInput.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/ntriples/GZippedNTriplesInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/ntriples/GZippedWholeFileNTriplesInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/rdfjson/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/rdfjson/AbstractCompressedRdfJsonInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/rdfjson/BZippedRdfJsonInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/rdfjson/DeflatedRdfJsonInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/rdfjson/GZippedRdfJsonInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/rdfxml/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/rdfxml/AbstractCompressedRdfXmlInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/rdfxml/BZippedRdfXmlInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/rdfxml/DeflatedRdfXmlInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/rdfxml/GZippedRdfXmlInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/trig/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/trig/AbstractCompressedTriGInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/trig/BZippedTriGInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/trig/DeflatedTriGInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/trig/GZippedTriGInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/turtle/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/turtle/AbstractCompressedTurtleInputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/turtle/BZippedTurtleInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/turtle/DeflatedTurtleInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/compressed/turtle/GZippedTurtleInputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/util/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/util/AbstractTrackableInputStreamTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/util/BlockInputStreamTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/input/util/TrackedInputStreamTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/output/
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/output/AbstractNodeTupleOutputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/output/AbstractQuadOutputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/output/AbstractTripleOutputFormatTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/output/NQuadsOutputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/output/NTriplesOutputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/output/RdfJsonOutputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/output/RdfXmlOutputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/output/TriGOutputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/java/com/yarcdata/urika/hadoop/rdf/io/output/TurtleOutputTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-io/src/test/resources/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/   (with props)
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/pom.xml
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/KeyMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/RdfMapReduceConstants.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/TextCountReducer.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/characteristics/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/characteristics/AbstractCharacteristicSetGeneratingReducer.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/characteristics/CharacteristicSetReducer.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/characteristics/QuadCharacteristicSetGeneratingReducer.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/characteristics/TripleCharacteristicSetGeneratingReducer.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/AbstractNodeTupleNodeCountMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/NodeCountReducer.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/QuadNodeCountMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/TripleNodeCountMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/datatypes/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/datatypes/QuadDataTypeCountMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/datatypes/TripleDataTypeCountMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/namespaces/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/namespaces/AbstractNodeTupleNamespaceCountMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/namespaces/QuadNamespaceCountMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/namespaces/TripleNamespaceCountMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/positional/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/positional/QuadObjectCountMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/positional/QuadPredicateCountMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/positional/QuadSubjectCountMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/positional/TripleObjectCountMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/positional/TriplePredicateCountMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/positional/TripleSubjectCountMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/AbstractNodeTupleFilterMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/AbstractQuadFilterMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/AbstractTripleFilterMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/GroundQuadFilterMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/GroundTripleFilterMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/ValidQuadFilterMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/ValidTripleFilterMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/positional/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/positional/AbstractQuadFilterByPositionMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/positional/AbstractTripleFilterByPositionMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/positional/QuadFilterByGraphUriMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/positional/QuadFilterByObjectUriMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/positional/QuadFilterByPredicateMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/positional/QuadFilterBySubjectUriMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/positional/TripleFilterByObjectUriMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/positional/TripleFilterByPredicateUriMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/positional/TripleFilterBySubjectUriMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/AbstractNodeTupleGroupingMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/AbstractQuadGroupingMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/AbstractTripleGroupingMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/QuadGroupByGraphMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/QuadGroupByObjectMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/QuadGroupByPredicateMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/QuadGroupBySubjectMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/TripleGroupByObjectMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/TripleGroupByPredicateMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/TripleGroupBySubjectMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/AbstractNodeTupleSplitToNodesMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/AbstractNodeTupleSplitWithNodesMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/QuadSplitToNodesMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/QuadSplitWithNodesMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/TripleSplitToNodesMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/TripleSplitWithNodesMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/transform/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/transform/AbstractTriplesToQuadsMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/transform/QuadsToTriplesMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/transform/TriplesToQuadsBySubjectMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/java/com/yarcdata/urika/hadoop/rdf/mapreduce/transform/TriplesToQuadsConstantGraphMapper.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/main/resources/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/AbstractMapReduceTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/AbstractMapperTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/characteristics/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/characteristics/AbstractCharacteristicSetGeneratingReducerTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/characteristics/CharacteristicSetReducerTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/characteristics/TripleCharacteristicSetGeneratingReducerTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/AbstractNodeTupleNodeCountReducedTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/AbstractNodeTupleNodeCountTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/QuadNodeCountMapReduceTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/QuadNodeCountMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/TripleNodeCountMapReduceTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/count/TripleNodeCountMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/AbstractNodeTupleFilterTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/AbstractQuadValidityFilterTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/AbstractTripleValidityFilterTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/TripleFilterByNoPredicateMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/TripleFilterByPredicateMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/TripleInvertedFilterByNoPredicateMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/TripleInvertedFilterByPredicateMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/ValidQuadFilterMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/filter/ValidTripleFilterMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/AbstractNodeTupleGroupingTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/AbstractQuadGroupingTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/AbstractTripleGroupingTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/QuadGroupByGraphMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/QuadGroupByObjectMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/QuadGroupByPredicateMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/QuadGroupBySubjectMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/TripleGroupByObjectMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/TripleGroupByPredicateMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/group/TripleGroupBySubjectMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/AbstractNodeTupleSplitToNodesTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/AbstractNodeTupleSplitWithNodesTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/AbstractQuadSplitToNodesTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/AbstractQuadSplitWithNodesTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/AbstractTripleSplitToNodesTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/AbstractTripleSplitWithNodesTests.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/QuadSplitToNodesMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/QuadSplitWithNodesMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/TripleSplitToNodesMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/split/TripleSplitWithNodesMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/transform/
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/transform/QuadsToTriplesMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/transform/TriplesToQuadsBySubjectMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/java/com/yarcdata/urika/hadoop/rdf/mapreduce/transform/TriplesToQuadsConstantGraphMapperTest.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-mapreduce/src/test/resources/
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/   (with props)
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/hadoop-job.xml
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/pom.xml
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/main/
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/main/java/
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/main/java/com/
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/main/java/com/yarcdata/
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/main/java/com/yarcdata/urika/
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/main/java/com/yarcdata/urika/hadoop/
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/main/java/com/yarcdata/urika/hadoop/rdf/
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/main/java/com/yarcdata/urika/hadoop/rdf/stats/
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/main/java/com/yarcdata/urika/hadoop/rdf/stats/RdfStats.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/main/java/com/yarcdata/urika/hadoop/rdf/stats/jobs/
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/main/java/com/yarcdata/urika/hadoop/rdf/stats/jobs/JobFactory.java
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/main/resources/
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/test/
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/test/java/
    jena/Experimental/hadoop-rdf/hadoop-rdf-stats/src/test/resources/
    jena/Experimental/hadoop-rdf/pom.xml
    jena/Experimental/hadoop-rdf/src/
    jena/Experimental/hadoop-rdf/src/site/

Propchange: jena/Experimental/hadoop-rdf/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Apr  2 09:20:51 2014
@@ -0,0 +1,2 @@
+.project
+.settings

Propchange: jena/Experimental/hadoop-rdf/hadoop-rdf-common/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Apr  2 09:20:51 2014
@@ -0,0 +1,4 @@
+.classpath
+.project
+.settings
+target

Added: jena/Experimental/hadoop-rdf/hadoop-rdf-common/pom.xml
URL: http://svn.apache.org/viewvc/jena/Experimental/hadoop-rdf/hadoop-rdf-common/pom.xml?rev=1583942&view=auto
==============================================================================
--- jena/Experimental/hadoop-rdf/hadoop-rdf-common/pom.xml (added)
+++ jena/Experimental/hadoop-rdf/hadoop-rdf-common/pom.xml Wed Apr  2 09:20:51 2014
@@ -0,0 +1,42 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>com.yarcdata.urika</groupId>
+		<artifactId>hadoop-rdf</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+	</parent>
+	<artifactId>hadoop-rdf-common</artifactId>
+	<name>Hadoop RDF Common</name>
+	<description>Common code for Hadoop RDF such as writable types for RDF</description>
+
+	<!-- Note that versions are managed by parent POMs -->
+	<dependencies>
+		<!-- Hadoop Dependencies -->
+		<!-- Note these will be provided on the Hadoop cluster hence the provided 
+			scope -->
+		<dependency>
+			<groupId>org.apache.hadoop</groupId>
+			<artifactId>hadoop-common</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.hadoop</groupId>
+			<artifactId>hadoop-mapreduce-client-common</artifactId>
+			<scope>provided</scope>
+		</dependency>
+
+		<!-- Jena dependencies -->
+		<dependency>
+			<groupId>org.apache.jena</groupId>
+			<artifactId>jena-arq</artifactId>
+		</dependency>
+
+		<!-- Test Dependencies -->
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+</project>
\ No newline at end of file

Added: jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/AbstractNodeTupleWritable.java
URL: http://svn.apache.org/viewvc/jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/AbstractNodeTupleWritable.java?rev=1583942&view=auto
==============================================================================
--- jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/AbstractNodeTupleWritable.java (added)
+++ jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/AbstractNodeTupleWritable.java Wed Apr  2 09:20:51 2014
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2013 YarcData LLC All Rights Reserved.
+ */
+
+package com.yarcdata.urika.hadoop.rdf.types;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import org.apache.hadoop.io.WritableComparable;
+import org.apache.hadoop.io.WritableUtils;
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.sparql.util.NodeUtils;
+
+/**
+ * A abstract general purpose writable where the actual class represented is
+ * composed of a number of {@link Node} instances
+ * 
+ * @author rvesse
+ * 
+ * @param <T>
+ */
+public abstract class AbstractNodeTupleWritable<T> implements WritableComparable<AbstractNodeTupleWritable<T>> {
+
+    private T tuple;
+
+    /**
+     * Creates a new empty instance
+     */
+    protected AbstractNodeTupleWritable() {
+        this(null);
+    }
+
+    /**
+     * Creates a new instance with the given value
+     * 
+     * @param tuple
+     *            Tuple value
+     */
+    protected AbstractNodeTupleWritable(T tuple) {
+        this.tuple = tuple;
+    }
+
+    /**
+     * Gets the tuple
+     * 
+     * @return Tuple
+     */
+    public T get() {
+        return this.tuple;
+    }
+
+    /**
+     * Sets the tuple
+     * 
+     * @param tuple
+     *            Tuple
+     */
+    public void set(T tuple) {
+        this.tuple = tuple;
+    }
+
+    @Override
+    public final void readFields(DataInput input) throws IOException {
+        // Determine how many nodes
+        int size = WritableUtils.readVInt(input);
+        Node[] ns = new Node[size];
+
+        NodeWritable nw = new NodeWritable();
+        for (int i = 0; i < ns.length; i++) {
+            nw.readFields(input);
+            ns[i] = nw.get();
+        }
+
+        // Load the tuple
+        this.tuple = this.createTuple(ns);
+    }
+
+    /**
+     * Creates the actual tuple type from an array of nodes
+     * 
+     * @param ns
+     *            Nodes
+     * @return Tuple
+     */
+    protected abstract T createTuple(Node[] ns);
+
+    @Override
+    public final void write(DataOutput output) throws IOException {
+        // Determine how many nodes
+        Node[] ns = this.createNodes(this.tuple);
+        WritableUtils.writeVInt(output, ns.length);
+
+        // Write out nodes
+        NodeWritable nw = new NodeWritable();
+        for (int i = 0; i < ns.length; i++) {
+            nw.set(ns[i]);
+            nw.write(output);
+        }
+    }
+
+    /**
+     * Converts the actual tuple type into an array of nodes
+     * 
+     * @param tuple
+     *            Tuples
+     * @return Nodes
+     */
+    protected abstract Node[] createNodes(T tuple);
+
+    /**
+     * Compares instances node by node
+     * <p>
+     * Derived implementations may wish to override this and substitute native
+     * tuple based comparisons
+     * </p>
+     * 
+     * @param other
+     *            Instance to compare with
+     */
+    @Override
+    public int compareTo(AbstractNodeTupleWritable<T> other) {
+        Node[] ns = this.createNodes(this.tuple);
+        Node[] otherNs = this.createNodes(other.tuple);
+
+        if (ns.length < otherNs.length) {
+            return -1;
+        } else if (ns.length > otherNs.length) {
+            return 1;
+        }
+        // Compare node by node
+        for (int i = 0; i < ns.length; i++) {
+            int c = NodeUtils.compareRDFTerms(ns[i], otherNs[i]);
+            if (c != 0)
+                return c;
+        }
+        return 0;
+    }
+
+    @Override
+    public String toString() {
+        return this.get().toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return this.get().hashCode();
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof AbstractNodeTupleWritable))
+            return false;
+        return this.compareTo((AbstractNodeTupleWritable<T>) other) == 0;
+    }
+}

Added: jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/CharacteristicSetWritable.java
URL: http://svn.apache.org/viewvc/jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/CharacteristicSetWritable.java?rev=1583942&view=auto
==============================================================================
--- jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/CharacteristicSetWritable.java (added)
+++ jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/CharacteristicSetWritable.java Wed Apr  2 09:20:51 2014
@@ -0,0 +1,284 @@
+/*
+ * Copyright 2013 YarcData LLC All Rights Reserved.
+ */
+
+package com.yarcdata.urika.hadoop.rdf.types;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.apache.hadoop.io.LongWritable;
+import org.apache.hadoop.io.WritableComparable;
+import org.apache.hadoop.io.WritableUtils;
+
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.graph.NodeFactory;
+
+/**
+ * Represents a characteristic set which is comprised of a count of nodes for
+ * which the characteristic is applicable and a set of characteristics which
+ * represents the number of usages of predicates with those nodes
+ * 
+ * @author rvesse
+ * 
+ */
+public class CharacteristicSetWritable implements WritableComparable<CharacteristicSetWritable> {
+
+    private Map<NodeWritable, CharacteristicWritable> characteristics = new TreeMap<NodeWritable, CharacteristicWritable>();
+    private LongWritable count = new LongWritable();
+
+    /**
+     * Creates a new empty characteristic set with the default count of 1
+     */
+    public CharacteristicSetWritable() {
+        this(1);
+    }
+
+    /**
+     * Creates a new characteristic set with the default count of 1 and the
+     * given characteristics
+     * 
+     * @param characteristics
+     *            Characteristics
+     */
+    public CharacteristicSetWritable(CharacteristicWritable... characteristics) {
+        this(1, characteristics);
+    }
+
+    /**
+     * Creates an empty characteristic set with the given count
+     * 
+     * @param count
+     *            Count
+     */
+    public CharacteristicSetWritable(long count) {
+        this(count, new CharacteristicWritable[0]);
+    }
+
+    /**
+     * Creates a new characteristic set
+     * 
+     * @param count
+     *            Count
+     * @param characteristics
+     *            Characteristics
+     */
+    public CharacteristicSetWritable(long count, CharacteristicWritable... characteristics) {
+        this.count.set(count);
+        for (CharacteristicWritable characteristic : characteristics) {
+            this.characteristics.put(characteristic.getNode(), characteristic);
+        }
+    }
+
+    /**
+     * Creates a new instance and reads its data from the given input
+     * 
+     * @param input
+     *            Input
+     * @return New instance
+     * @throws IOException
+     */
+    public static CharacteristicSetWritable read(DataInput input) throws IOException {
+        CharacteristicSetWritable set = new CharacteristicSetWritable();
+        set.readFields(input);
+        return set;
+    }
+
+    /**
+     * Gets the count
+     * 
+     * @return Count
+     */
+    public LongWritable getCount() {
+        return this.count;
+    }
+
+    /**
+     * Gets the characteristics
+     * 
+     * @return Characteristics
+     */
+    public Iterator<CharacteristicWritable> getCharacteristics() {
+        return this.characteristics.values().iterator();
+    }
+
+    /**
+     * Gets the size of the characteristic set
+     * 
+     * @return Size
+     */
+    public int size() {
+        return this.characteristics.size();
+    }
+
+    /**
+     * Adds a characteristic to the set merging it into the appropriate existing
+     * characteristic if applicable
+     * 
+     * @param characteristic
+     *            Characteristics
+     */
+    public void add(CharacteristicWritable characteristic) {
+        if (this.characteristics.containsKey(characteristic.getNode())) {
+            this.characteristics.get(characteristic.getNode()).increment(characteristic.getCount().get());
+        } else {
+            this.characteristics.put(characteristic.getNode(), characteristic);
+        }
+    }
+
+    /**
+     * Adds some characteristics to the set merging them with the appropriate
+     * existing characteristics if applicable
+     * 
+     * @param characteristics
+     */
+    public void add(CharacteristicWritable... characteristics) {
+        for (CharacteristicWritable characteristic : characteristics) {
+            this.add(characteristic);
+        }
+    }
+
+    /**
+     * Adds the contents of the other characteristic set to this characteristic
+     * set
+     * 
+     * @param set
+     *            Characteristic set
+     */
+    public void add(CharacteristicSetWritable set) {
+        this.increment(set.getCount().get());
+        Iterator<CharacteristicWritable> iter = set.getCharacteristics();
+        while (iter.hasNext()) {
+            this.add(iter.next());
+        }
+    }
+
+    /**
+     * Gets whether the set contains a characteristic for the given predicate
+     * 
+     * @param uri
+     *            Predicate URI
+     * @return True if contained in the set, false otherwise
+     */
+    public boolean hasCharacteristic(String uri) {
+        return this.hasCharacteristic(NodeFactory.createURI(uri));
+    }
+
+    /**
+     * Gets whether the set contains a characteristic for the given predicate
+     * 
+     * @param n
+     *            Predicate
+     * @return True if contained in the set, false otherwise
+     */
+    public boolean hasCharacteristic(Node n) {
+        return this.hasCharacteristic(new NodeWritable(n));
+    }
+
+    /**
+     * Gets whether the set contains a characteristic for the given predicate
+     * 
+     * @param n
+     *            Predicate
+     * @return True if contained in the set, false otherwise
+     */
+    public boolean hasCharacteristic(NodeWritable n) {
+        return this.characteristics.containsKey(n);
+    }
+
+    /**
+     * Increments the count by the given increment
+     * 
+     * @param l
+     *            Increment
+     */
+    public void increment(long l) {
+        this.count.set(this.count.get() + l);
+    }
+
+    @Override
+    public void write(DataOutput output) throws IOException {
+        // Write size, then count, then characteristics
+        WritableUtils.writeVInt(output, this.characteristics.size());
+        this.count.write(output);
+        for (CharacteristicWritable characteristic : this.characteristics.values()) {
+            characteristic.write(output);
+        }
+    }
+
+    @Override
+    public void readFields(DataInput input) throws IOException {
+        // Read size, then count, then characteristics
+        int size = WritableUtils.readVInt(input);
+        this.count.readFields(input);
+        this.characteristics.clear();
+        for (int i = 0; i < size; i++) {
+            CharacteristicWritable cw = CharacteristicWritable.read(input);
+            this.characteristics.put(cw.getNode(), cw);
+        }
+    }
+
+    @Override
+    public int compareTo(CharacteristicSetWritable cs) {
+        int size = this.characteristics.size();
+        int otherSize = cs.characteristics.size();
+        if (size < otherSize) {
+            return -1;
+        } else if (size > otherSize) {
+            return 1;
+        } else {
+            // Compare characteristics in turn
+            Iterator<CharacteristicWritable> iter = this.getCharacteristics();
+            Iterator<CharacteristicWritable> otherIter = cs.getCharacteristics();
+
+            int compare = 0;
+            while (iter.hasNext()) {
+                CharacteristicWritable c = iter.next();
+                CharacteristicWritable otherC = otherIter.next();
+                compare = c.compareTo(otherC);
+                if (compare != 0)
+                    return compare;
+            }
+            return compare;
+        }
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof CharacteristicSetWritable))
+            return false;
+        return this.compareTo((CharacteristicSetWritable) other) == 0;
+    }
+
+    @Override
+    public int hashCode() {
+        // Build a hash code from characteristics
+        if (this.characteristics.size() == 0)
+            return 0;
+        Iterator<CharacteristicWritable> iter = this.getCharacteristics();
+        int hash = 17;
+        while (iter.hasNext()) {
+            hash = hash * 31 + iter.next().hashCode();
+        }
+        return hash;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("{ ");
+        builder.append(this.count.get());
+        Iterator<CharacteristicWritable> iter = this.getCharacteristics();
+        while (iter.hasNext()) {
+            builder.append(" , ");
+            builder.append(iter.next().toString());
+        }
+        builder.append(" }");
+        return builder.toString();
+    }
+
+}

Added: jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/CharacteristicWritable.java
URL: http://svn.apache.org/viewvc/jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/CharacteristicWritable.java?rev=1583942&view=auto
==============================================================================
--- jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/CharacteristicWritable.java (added)
+++ jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/CharacteristicWritable.java Wed Apr  2 09:20:51 2014
@@ -0,0 +1,146 @@
+/*
+ * Copyright 2013 YarcData LLC All Rights Reserved.
+ */
+
+package com.yarcdata.urika.hadoop.rdf.types;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.hadoop.io.LongWritable;
+import org.apache.hadoop.io.WritableComparable;
+
+import com.hp.hpl.jena.graph.Node;
+
+/**
+ * Represents a characteristic for a single node and contains the node and a
+ * count associated with that node
+ * <p>
+ * Note that characteristics are compared based upon only the nodes and not
+ * their counts
+ * </p>
+ * 
+ * @author rvesse
+ * 
+ */
+public class CharacteristicWritable implements WritableComparable<CharacteristicWritable> {
+
+    private NodeWritable node = new NodeWritable();
+    private LongWritable count = new LongWritable();
+
+    /**
+     * Creates an empty characteristic writable
+     */
+    public CharacteristicWritable() {
+        this(null);
+    }
+
+    /**
+     * Creates a characteristic writable with the given node and the default
+     * count of 1
+     * 
+     * @param n
+     *            Node
+     */
+    public CharacteristicWritable(Node n) {
+        this(n, 1);
+    }
+
+    /**
+     * Creates a characteristic writable with the given node and count
+     * 
+     * @param n
+     *            Node
+     * @param count
+     *            Count
+     */
+    public CharacteristicWritable(Node n, long count) {
+        this.node.set(n);
+        this.count.set(count);
+    }
+
+    /**
+     * Creates a new instance and reads in its data from the given input
+     * 
+     * @param input
+     *            Input
+     * @return New instance
+     * @throws IOException
+     */
+    public static CharacteristicWritable read(DataInput input) throws IOException {
+        CharacteristicWritable cw = new CharacteristicWritable();
+        cw.readFields(input);
+        return cw;
+    }
+
+    /**
+     * Gets the node
+     * 
+     * @return Node
+     */
+    public NodeWritable getNode() {
+        return this.node;
+    }
+
+    /**
+     * Gets the count
+     * 
+     * @return Count
+     */
+    public LongWritable getCount() {
+        return this.count;
+    }
+
+    /**
+     * Increments the count by 1
+     */
+    public void increment() {
+        this.increment(1);
+    }
+
+    /**
+     * Increments the count by the given value
+     * 
+     * @param l
+     *            Value to increment by
+     */
+    public void increment(long l) {
+        this.count.set(this.count.get() + l);
+    }
+
+    @Override
+    public void write(DataOutput output) throws IOException {
+        this.node.write(output);
+        this.count.write(output);
+    }
+
+    @Override
+    public void readFields(DataInput input) throws IOException {
+        this.node.readFields(input);
+        this.count.readFields(input);
+    }
+
+    @Override
+    public int compareTo(CharacteristicWritable o) {
+        return this.node.compareTo(o.node);
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof CharacteristicWritable))
+            return false;
+        return this.compareTo((CharacteristicWritable) other) == 0;
+    }
+
+    @Override
+    public int hashCode() {
+        return this.node.hashCode();
+    }
+
+    @Override
+    public String toString() {
+        return "(" + this.node.toString() + ", " + this.count.toString() + ")";
+    }
+
+}

Added: jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/NodeTupleWritable.java
URL: http://svn.apache.org/viewvc/jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/NodeTupleWritable.java?rev=1583942&view=auto
==============================================================================
--- jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/NodeTupleWritable.java (added)
+++ jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/NodeTupleWritable.java Wed Apr  2 09:20:51 2014
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2013 YarcData LLC All Rights Reserved.
+ */
+
+package com.yarcdata.urika.hadoop.rdf.types;
+
+import java.io.DataInput;
+import java.io.IOException;
+
+import org.apache.jena.atlas.lib.Tuple;
+import com.hp.hpl.jena.graph.Node;
+
+/**
+ * A writable RDF tuple
+ * <p>
+ * Unlike the more specific {@link TripleWritable} and {@link QuadWritable} this
+ * class allows for arbitrary length tuples and does not restrict tuples to
+ * being of uniform size.
+ * </p>
+ * 
+ * @author rvesse
+ * 
+ */
+public class NodeTupleWritable extends AbstractNodeTupleWritable<Tuple<Node>> {
+
+    /**
+     * Creates a new empty instance
+     */
+    public NodeTupleWritable() {
+        this(null);
+    }
+
+    /**
+     * Creates a new instance with the given value
+     * 
+     * @param tuple
+     *            Tuple
+     */
+    public NodeTupleWritable(Tuple<Node> tuple) {
+        super(tuple);
+    }
+
+    /**
+     * Creates a new instance from the given input
+     * 
+     * @param input
+     *            Input
+     * @return New instance
+     * @throws IOException
+     */
+    public static NodeTupleWritable read(DataInput input) throws IOException {
+        NodeTupleWritable t = new NodeTupleWritable();
+        t.readFields(input);
+        return t;
+    }
+
+    @Override
+    protected Tuple<Node> createTuple(Node[] ns) {
+        return Tuple.create(ns);
+    }
+
+    @Override
+    protected Node[] createNodes(Tuple<Node> tuple) {
+        return tuple.tuple();
+    }
+}

Added: jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/NodeWritable.java
URL: http://svn.apache.org/viewvc/jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/NodeWritable.java?rev=1583942&view=auto
==============================================================================
--- jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/NodeWritable.java (added)
+++ jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/NodeWritable.java Wed Apr  2 09:20:51 2014
@@ -0,0 +1,201 @@
+/*
+ * Copyright 2013 YarcData LLC All Rights Reserved.
+ */
+
+package com.yarcdata.urika.hadoop.rdf.types;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.nio.charset.Charset;
+
+import org.apache.hadoop.io.WritableComparable;
+import org.apache.hadoop.io.WritableComparator;
+import org.apache.hadoop.io.WritableUtils;
+import org.apache.jena.atlas.io.AWriter;
+import org.apache.jena.atlas.io.Writer2;
+import org.apache.jena.riot.RiotException;
+import org.apache.jena.riot.lang.LabelToNode;
+import org.apache.jena.riot.out.NodeFmtLib;
+import org.apache.jena.riot.out.NodeFormatter;
+import org.apache.jena.riot.out.NodeFormatterNT;
+import org.apache.jena.riot.out.NodeToLabel;
+import org.apache.jena.riot.system.SyntaxLabels;
+import org.apache.jena.riot.tokens.Token;
+import org.apache.jena.riot.tokens.Tokenizer;
+import org.apache.jena.riot.tokens.TokenizerFactory;
+
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.sparql.util.NodeUtils;
+import com.yarcdata.urika.hadoop.rdf.types.compators.NodeComparator;
+
+/**
+ * A writable for {@link Node} instances
+ * 
+ * @author rvesse
+ * 
+ */
+public class NodeWritable implements WritableComparable<NodeWritable> {
+
+    protected static final Charset utf8 = Charset.forName("utf-8");
+    protected static final NodeFormatter formatter = new NodeFormatterNT();
+    protected static final NodeToLabel nodeToLabel = SyntaxLabels.createNodeToLabelRT();
+    protected static final LabelToNode labelToNode = SyntaxLabels.createLabelToNodeRT();
+    
+    static {
+        WritableComparator.define(NodeWritable.class, new NodeComparator());
+    }
+
+    private Node node;
+
+    /**
+     * Creates an empty writable
+     */
+    public NodeWritable() {
+        this(null);
+    }
+
+    /**
+     * Creates a new instance from the given input
+     * 
+     * @param input
+     *            Input
+     * @return New instance
+     * @throws IOException
+     */
+    public static NodeWritable read(DataInput input) throws IOException {
+        NodeWritable nw = new NodeWritable();
+        nw.readFields(input);
+        return nw;
+    }
+
+    /**
+     * Creates a new writable with the given value
+     * 
+     * @param n
+     *            Node
+     */
+    public NodeWritable(Node n) {
+        // Finally set the node
+        this.set(n);
+    }
+
+    /**
+     * Gets the node
+     * 
+     * @return Node
+     */
+    public Node get() {
+        return this.node;
+    }
+
+    /**
+     * Sets the node
+     * 
+     * @param n
+     *            Node
+     */
+    public void set(Node n) {
+        if (n == null || !n.isBlank()) {
+            this.node = n;
+        } else {
+            // Special handling for blank nodes
+            this.node = labelToNode.get(null, nodeToLabel.get(null, n));
+        }
+    }
+
+    @Override
+    public void readFields(DataInput input) throws IOException {
+        // Read type and ignore, used elsewhere for fast binary comparisons
+        WritableUtils.readVInt(input);
+
+        // Read length and use this to read in the bytes that represent the
+        // serialized node
+        int length = WritableUtils.readVInt(input);
+        byte[] bytes = new byte[length];
+        input.readFully(bytes, 0, length);
+
+        // Parse in the node
+        this.node = this.parseNode(new String(bytes, utf8));
+    }
+
+    protected Node parseNode(String nodeString) {
+        Tokenizer tokenizer = TokenizerFactory.makeTokenizerString(nodeString);
+        if (!tokenizer.hasNext())
+            throw new RiotException("Empty RDF term");
+        Token token = tokenizer.next();
+        Node node;
+        if (token.isBNode()) {
+            String label = NodeFmtLib.decodeBNodeLabel(token.getImage());
+            node = labelToNode.get(null, label);
+        } else {
+            node = token.asNode(null);
+        }
+        if (node == null)
+            throw new RiotException("Bad RDF Term: " + nodeString);
+
+        if (tokenizer.hasNext())
+            throw new RiotException("Trailing characters in string: " + nodeString);
+        if (node.isURI()) {
+            // Lightly test for bad URIs.
+            String x = node.getURI();
+            if (x.indexOf(' ') >= 0)
+                throw new RiotException("Space(s) in  IRI: " + nodeString);
+        }
+        return node;
+    }
+
+    @Override
+    public void write(DataOutput output) throws IOException {
+        StringWriter strWriter = new StringWriter();
+        AWriter writer = Writer2.wrap(strWriter);
+        formatter.format(writer, this.node);
+        writer.close();
+        String nodeStr = strWriter.toString();
+        byte[] bytes = nodeStr.getBytes(utf8);
+        // Write out type, length and bytes
+        WritableUtils.writeVInt(output, this.getTypeId());
+        WritableUtils.writeVInt(output, bytes.length);
+        output.write(bytes);
+    }
+
+    /**
+     * Gets the node type identifier
+     * 
+     * @return Node type identifier
+     */
+    protected final int getTypeId() {
+        if (node.isVariable())
+            return 0;
+        if (node.isBlank())
+            return 1;
+        if (node.isURI())
+            return 2;
+        if (node.isLiteral())
+            return 3;
+        throw new RuntimeException("Unknown node type");
+    }
+
+    @Override
+    public int compareTo(NodeWritable other) {
+        return NodeUtils.compareRDFTerms(this.node, other.node);
+    }
+
+    @Override
+    public String toString() {
+        return this.node.toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return this.node.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof NodeWritable))
+            return false;
+        return this.compareTo((NodeWritable) other) == 0;
+    }
+}

Added: jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/QuadWritable.java
URL: http://svn.apache.org/viewvc/jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/QuadWritable.java?rev=1583942&view=auto
==============================================================================
--- jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/QuadWritable.java (added)
+++ jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/QuadWritable.java Wed Apr  2 09:20:51 2014
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2013 YarcData LLC All Rights Reserved.
+ */
+
+package com.yarcdata.urika.hadoop.rdf.types;
+
+import java.io.DataInput;
+import java.io.IOException;
+
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.sparql.core.Quad;
+
+/**
+ * A writable quad
+ * 
+ * @author rvesse
+ * 
+ */
+public class QuadWritable extends AbstractNodeTupleWritable<Quad> {
+
+    /**
+     * Creates a new empty instance
+     */
+    public QuadWritable() {
+        this(null);
+    }
+
+    /**
+     * Creates a new instance with the given value
+     * 
+     * @param q
+     *            Quad
+     */
+    public QuadWritable(Quad q) {
+        super(q);
+    }
+
+    /**
+     * Creates a new instance from the given input
+     * 
+     * @param input
+     *            Input
+     * @return New instance
+     * @throws IOException
+     */
+    public static QuadWritable read(DataInput input) throws IOException {
+        QuadWritable q = new QuadWritable();
+        q.readFields(input);
+        return q;
+    }
+
+    @Override
+    protected Quad createTuple(Node[] ns) {
+        if (ns.length != 4)
+            throw new IllegalArgumentException(String.format("Incorrect number of nodes to form a quad - got %d but expected 4",
+                    ns.length));
+        return new Quad(ns[0], ns[1], ns[2], ns[3]);
+    }
+
+    @Override
+    protected Node[] createNodes(Quad tuple) {
+        Quad q = this.get();
+        return new Node[] { q.getGraph(), q.getSubject(), q.getPredicate(), q.getObject() };
+    }
+
+}

Added: jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/TripleWritable.java
URL: http://svn.apache.org/viewvc/jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/TripleWritable.java?rev=1583942&view=auto
==============================================================================
--- jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/TripleWritable.java (added)
+++ jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/TripleWritable.java Wed Apr  2 09:20:51 2014
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2013 YarcData LLC All Rights Reserved.
+ */
+
+package com.yarcdata.urika.hadoop.rdf.types;
+
+import java.io.DataInput;
+import java.io.IOException;
+
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.graph.Triple;
+
+/**
+ * A writable triple
+ * 
+ * @author rvesse
+ * 
+ */
+public class TripleWritable extends AbstractNodeTupleWritable<Triple> {
+
+    /**
+     * Creates a new instance using the default NTriples node formatter
+     */
+    public TripleWritable() {
+        this(null);
+    }
+
+    /**
+     * Creates a new instance with a given value that uses a specific node
+     * formatter
+     * 
+     * @param t
+     *            Triple
+     */
+    public TripleWritable(Triple t) {
+        super(t);
+    }
+
+    /**
+     * Creates a new instance from the given input
+     * 
+     * @param input
+     *            Input
+     * @return New instance
+     * @throws IOException
+     */
+    public static TripleWritable read(DataInput input) throws IOException {
+        TripleWritable t = new TripleWritable();
+        t.readFields(input);
+        return t;
+    }
+
+    @Override
+    protected Triple createTuple(Node[] ns) {
+        if (ns.length != 3)
+            throw new IllegalArgumentException(String.format(
+                    "Incorrect number of nodes to form a triple - got %d but expected 3", ns.length));
+        return new Triple(ns[0], ns[1], ns[2]);
+    }
+
+    @Override
+    protected Node[] createNodes(Triple tuple) {
+        Triple t = this.get();
+        return new Node[] { t.getSubject(), t.getPredicate(), t.getObject() };
+    }
+}

Added: jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/compators/NodeComparator.java
URL: http://svn.apache.org/viewvc/jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/compators/NodeComparator.java?rev=1583942&view=auto
==============================================================================
--- jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/compators/NodeComparator.java (added)
+++ jena/Experimental/hadoop-rdf/hadoop-rdf-common/src/main/java/com/yarcdata/urika/hadoop/rdf/types/compators/NodeComparator.java Wed Apr  2 09:20:51 2014
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2013 YarcData LLC All Rights Reserved.
+ */
+
+package com.yarcdata.urika.hadoop.rdf.types.compators;
+
+import java.io.IOException;
+
+import org.apache.hadoop.io.DataInputBuffer;
+import org.apache.hadoop.io.WritableComparator;
+import org.apache.hadoop.io.WritableUtils;
+
+/**
+ * A comparator for nodes that provides an efficient binary comparison
+ * 
+ * @author rvesse
+ * 
+ */
+public class NodeComparator extends WritableComparator {
+
+    private DataInputBuffer buffer = new DataInputBuffer();
+
+    @Override
+    public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
+        try {
+            // Read info for first node
+            buffer.reset(b1, s1, l1);
+            int type1 = WritableUtils.readVInt(buffer);
+            int length1 = WritableUtils.readVInt(buffer);
+
+            // Read info for second node
+            buffer.reset(b2, s2, l2);
+            int type2 = WritableUtils.readVInt(buffer);
+            int length2 = WritableUtils.readVInt(buffer);
+
+            // Are types different?
+            if (type1 < type2) {
+                return -1;
+            } else if (type1 > type2) {
+                return 1;
+            }
+
+            // Otherwise compare lexicographically
+            int adj1 = WritableUtils.getVIntSize(type1) + WritableUtils.getVIntSize(length1);
+            int adj2 = WritableUtils.getVIntSize(type2) + WritableUtils.getVIntSize(length2);
+            return WritableComparator.compareBytes(b1, s1 + adj1, l1 - adj1, b2, s2 + adj2, l2 - adj2);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+}