StructTypeInfo prune() {
      List<String> newNames = new ArrayList<>();
      List<TypeInfo> newTypes = new ArrayList<>();
      List<String> oldNames = typeInfo.getAllStructFieldNames();
      List<TypeInfo> oldTypes = typeInfo.getAllStructFieldTypeInfos();
      for (int i = 0; i < oldNames.size(); ++i) {
        String fn = oldNames.get(i);
        if (selected[i]) {
          newNames.add(fn);
          if (children.containsKey(fn.toLowerCase())) {
            newTypes.add(children.get(fn.toLowerCase()).prune());
          } else {
            newTypes.add(oldTypes.get(i));
          }
        }
      }
      return (StructTypeInfo) TypeInfoFactory.getStructTypeInfo(newNames, newTypes);
    }
Given a complete struct type info and pruned paths containing selected fields
from the type info, return a pruned struct type info only with the selected fields.

For instance, if 'originalTypeInfo' is: s:struct<a:struct<b:int, c:boolean>, d:string>
  and 'prunedPaths' is ["s.a.b,s.d"], then the result will be:
  s:struct<a:struct<b:int>, d:string>

@param originalTypeInfo the complete struct type info
@param prunedPaths a string representing the pruned paths, separated by ','
@return the pruned struct type info
ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java