return getRawDataSizeFromColIndices(colIndices);
}
private List<Integer> getColumnIndicesFromNames(List<String> colNames) {
// top level struct
Type type = footer.getTypesList().get(0);
List<Integer> colIndices = Lists.newArrayList();
List<String> fieldNames = type.getFieldNamesList();
int fieldIdx = 0;
for (String colName : colNames) {
if (fieldNames.contains(colName)) {
fieldIdx = fieldNames.indexOf(colName);
}
// a single field may span multiple columns. find start and end column
// index for the requested field
int idxStart = type.getSubtypes(fieldIdx);
int idxEnd;
// if the specified is the last field and then end index will be last
// column index
if (fieldIdx + 1 > fieldNames.size() - 1) {
idxEnd = getLastIdx() + 1;
} else {
idxEnd = type.getSubtypes(fieldIdx + 1);
}
// if start index and end index are same then the field is a primitive
// field else complex field (like map, list, struct, union)
if (idxStart == idxEnd) {