Is there a reason you are not using a ParquetProtocol, like what was done in https://github.com/Parquet/parquet-mr/blob/master/parquet-thrift/src/main/java/parquet/thrift/ParquetWriteProtocol.java ? I suspect that approach could be significantly faster than doing this iteration and branching on every record.