private TypeInfo getStructFieldTypeInfo(String field, int fieldIndex) {
    String fieldLowerCase = field.toLowerCase();
    if (Boolean.parseBoolean(getMetadata().get(DataWritableReadSupport.PARQUET_COLUMN_INDEX_ACCESS))
        && fieldIndex < hiveFieldNames.size()) {
      return hiveFieldTypeInfos.get(fieldIndex);
    }
    for (int i = 0; i < hiveFieldNames.size(); i++) {
      if (fieldLowerCase.equalsIgnoreCase(hiveFieldNames.get(i))) {
        return hiveFieldTypeInfos.get(i);
      }
    }
    //This means hive type doesn't refer this field that comes from file schema.
    //i.e. the field is not required for hive table. It can occur due to schema
    //evolution where some field is deleted.
    return null;
  }
A MapWritableGroupConverter, real converter between hive and parquet types recursively for complex types.
ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveStructConverter.java