code: private List<List<Writable>> filterRequiredColumns(String readerName, List<List<Writable>> list){
  
          //Options: (a) entire reader
          //(b) one or more subsets
  
          boolean entireReader = false;
          List<SubsetDetails> subsetList = null;
          int max = -1;
          int min = Integer.MAX_VALUE;
          for(List<SubsetDetails> sdList : Arrays.asList(inputs, outputs)) {
              for (SubsetDetails sd : sdList) {
                  if (readerName.equals(sd.readerName)) {
                      if (sd.entireReader) {
                          entireReader = true;
                          break;
                      } else {
                          if (subsetList == null) {
                              subsetList = new ArrayList<>();
                          }
                          subsetList.add(sd);
                          max = Math.max(max, sd.subsetEndInclusive);
                          min = Math.min(min, sd.subsetStart);
                      }
                  }
              }
          }
  
          if(entireReader){
              //No filtering required
              return list;
          } else if(subsetList == null){
              throw new IllegalStateException("Found no usages of reader: " + readerName);
          } else {
              //we need some - but not all - columns
              boolean[] req = new boolean[max+1];
              for(SubsetDetails sd : subsetList){
                  for( int i=sd.subsetStart; i<= sd.subsetEndInclusive; i++ ){
                      req[i] = true;
                  }
              }
  
              List<List<Writable>> out = new ArrayList<>();
              IntWritable zero = new IntWritable(0);
              for(List<Writable> l : list){
                  List<Writable> lNew = new ArrayList<>(l.size());
                  for(int i=0; i<l.size(); i++ ){
                      if(i >= req.length || !req[i]){
                          lNew.add(zero);
                      } else {
                          lNew.add(l.get(i));
                      }
                  }
                  out.add(lNew);
              }
              return out;
          }
      }
docs: Filter out the required columns before conversion. This is to avoid trying to convert String etc columns