public List<Pair<K3, V3>> run() throws IOException {
List<Pair<K2, V2>> mapOutputs = new ArrayList<Pair<K2, V2>>();
for (Pair<K1, V1> input : inputList) {
LOG.debug("Mapping input " + input.toString() + ")");
mapOutputs.addAll(new MapDriver<K1, V1, K2, V2>(myMapper).withInput(
input).withCounters(getCounters()).withConfiguration(configuration).run());
}
List<Pair<K2, List<V2>>> reduceInputs = shuffle(mapOutputs);
List<Pair<K3, V3>> reduceOutputs = new ArrayList<Pair<K3, V3>>();
for (Pair<K2, List<V2>> input : reduceInputs) {
K2 inputKey = input.getFirst();
List<V2> inputValues = input.getSecond();
StringBuilder sb = new StringBuilder();
formatValueList(inputValues, sb);
LOG.debug("Reducing input (" + inputKey.toString() + ", "
+ sb.toString() + ")");
reduceOutputs.addAll(new ReduceDriver<K2, V2, K3, V3>(myReducer)
.withCounters(getCounters()).withConfiguration(configuration)
.withInputKey(inputKey).withInputValues(inputValues).run());
}
return reduceOutputs;
}