private Converter getFieldConverter(Type type, int fieldIndex, TypeInfo hiveTypeInfo) {
    Converter converter;
    if (type.isRepetition(Type.Repetition.REPEATED)) {
      if (type.isPrimitive()) {
        converter = new Repeated.RepeatedPrimitiveConverter(
            type.asPrimitiveType(), this, fieldIndex, hiveTypeInfo);
      } else {
        converter = new Repeated.RepeatedGroupConverter(
            type.asGroupType(), this, fieldIndex, hiveTypeInfo == null ? null : ((ListTypeInfo) hiveTypeInfo)
            .getListElementTypeInfo());
      }

      repeatedConverters.add((Repeated) converter);
    } else {
      converter = getConverterFromDescription(type, fieldIndex, this, hiveTypeInfo);
    }

    return converter;
  }
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