Instead of making those (CodecFactory/ParquetRecordReader) public for the purpose of AvroParquetWriter and AvroParquetReader could you create Generic classes that do the same and take a ReadSupport/WriteSupport ?
That would avoid exposing internals and duplicating the initialization code.