@Override
  public RecordMaterializer<ArrayWritable> prepareForRead(final Configuration configuration,
      final Map<String, String> keyValueMetaData, final MessageType fileSchema,
          final org.apache.parquet.hadoop.api.ReadSupport.ReadContext readContext) {
    final Map<String, String> metadata = readContext.getReadSupportMetadata();
    if (metadata == null) {
      throw new IllegalStateException("ReadContext not initialized properly. " +
        "Don't know the Hive Schema.");
    }

    String key = HiveConf.ConfVars.HIVE_PARQUET_TIMESTAMP_SKIP_CONVERSION.varname;
    if (!metadata.containsKey(key)) {
      metadata.put(key, String.valueOf(HiveConf.getBoolVar(
        configuration, HiveConf.ConfVars.HIVE_PARQUET_TIMESTAMP_SKIP_CONVERSION)));
    }

    String writerTimezone = DataWritableWriteSupport.WRITER_TIMEZONE;
    if (!metadata.containsKey(writerTimezone)) {
      if (keyValueMetaData.containsKey(writerTimezone)) {
        metadata.put(writerTimezone, keyValueMetaData.get(writerTimezone));
      }
    } else if (!metadata.get(writerTimezone).equals(keyValueMetaData.get(writerTimezone))) {
      throw new IllegalStateException("Metadata contains a writer time zone that does not match "
          + "file footer's writer time zone.");
    }

    String writerProleptic = DataWritableWriteSupport.WRITER_DATE_PROLEPTIC;
    if (!metadata.containsKey(writerProleptic)) {
      if (keyValueMetaData.containsKey(writerProleptic)) {
        metadata.put(writerProleptic, keyValueMetaData.get(writerProleptic));
      }
    } else if (!metadata.get(writerProleptic).equals(keyValueMetaData.get(writerProleptic))) {
      throw new IllegalStateException("Metadata contains a writer proleptic property value that does not match "
          + "file footer's value.");
    }

    String prolepticDefault = ConfVars.HIVE_PARQUET_DATE_PROLEPTIC_GREGORIAN_DEFAULT.varname;
    if (!metadata.containsKey(prolepticDefault)) {
      metadata.put(prolepticDefault, String.valueOf(HiveConf.getBoolVar(
          configuration, HiveConf.ConfVars.HIVE_PARQUET_DATE_PROLEPTIC_GREGORIAN_DEFAULT)));
    }

    if (!metadata.containsKey(DataWritableWriteSupport.WRITER_ZONE_CONVERSION_LEGACY)) {
      boolean legacyConversion = getZoneConversionLegacy(keyValueMetaData, configuration);
      metadata.put(DataWritableWriteSupport.WRITER_ZONE_CONVERSION_LEGACY, String.valueOf(legacyConversion));
    } else {
      String ctxMeta = metadata.get(DataWritableWriteSupport.WRITER_ZONE_CONVERSION_LEGACY);
      String fileMeta = keyValueMetaData.get(DataWritableWriteSupport.WRITER_ZONE_CONVERSION_LEGACY);
      if (!Objects.equals(ctxMeta, fileMeta)) {
        throw new IllegalStateException(
            "Different values for " + DataWritableWriteSupport.WRITER_ZONE_CONVERSION_LEGACY + " metadata: context ["
                + ctxMeta + "], file [" + fileMeta + "].");
      }
    }

    return new DataWritableRecordConverter(readContext.getRequestedSchema(), metadata, hiveTypeInfo);
  }
It creates the hive read support to interpret data from parquet to hive

@param configuration // unused
@param keyValueMetaData
@param fileSchema // unused
@param readContext containing the requested schema and the schema of the hive table
@return Record Materialize for Hive
ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/DataWritableReadSupport.java