The readFields(DataInput in) in SortedMapWritable doesn't reset the internally used SortedMap. If this Writable object is reused then entries will get accumulated in the map with every call of readFields().
I have seen this behavior when using SequenceFileInputFormat. See SequenceFileRecordReader.java and SequenceFile.Reader.