@Override
    PrimitiveConverter getConverter(final PrimitiveType type, final int index, final ConverterParent parent, TypeInfo hiveTypeInfo) {
      if (hiveTypeInfo != null) {
        String typeName = TypeInfoUtils.getBaseName(hiveTypeInfo.getTypeName());
        switch (typeName) {
          case serdeConstants.BIGINT_TYPE_NAME:
            return new BinaryConverter<LongWritable>(type, parent, index) {
              @Override
              protected LongWritable convert(Binary binary) {
                Preconditions.checkArgument(binary.length() == 12, "Must be 12 bytes");
                ByteBuffer buf = binary.toByteBuffer();
                buf.order(ByteOrder.LITTLE_ENDIAN);
                long longVal = buf.getLong();
                return new LongWritable(longVal);
              }
            };
        }
      }
      return new BinaryConverter<TimestampWritableV2>(type, parent, index) {
        @Override
        protected TimestampWritableV2 convert(Binary binary) {
          NanoTime nt = NanoTime.fromBinary(binary);
          Map<String, String> metadata = parent.getMetadata();
          // Current Hive parquet timestamp implementation stores timestamps in UTC, but other
          // components do not. In this case we skip timestamp conversion.
          // If this file is written by a version of hive before HIVE-21290, file metadata will
          // not contain the writer timezone, so we convert the timestamp to the system (reader)
          // time zone.
          // If file is written by current Hive implementation, we convert timestamps to the writer
          // time zone in order to emulate time zone agnostic behavior.
          boolean skipConversion = Boolean.parseBoolean(
              metadata.get(HiveConf.ConfVars.HIVE_PARQUET_TIMESTAMP_SKIP_CONVERSION.varname));
          String legacyConversion = metadata.get(DataWritableWriteSupport.WRITER_ZONE_CONVERSION_LEGACY);
          assert legacyConversion != null;
          ZoneId targetZone = skipConversion ? ZoneOffset.UTC : MoreObjects
              .firstNonNull(DataWritableReadSupport.getWriterTimeZoneId(metadata), TimeZone.getDefault().toZoneId());
          Timestamp ts = NanoTimeUtils.getTimestamp(nt, targetZone, Boolean.parseBoolean(legacyConversion));
          return new TimestampWritableV2(ts);
        }
      };
    }
ETypeConverter is an easy way to set the converter for the right type.
ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java