Reduces values for a given key.
The framework calls this method for each <key, (list of values)>
pair in the grouped inputs. Output values must be of the same type as input values. Input keys must not be altered. Typically all values are combined into zero or one value.
Output pairs are collected with calls to {@link OutputCollector#collect(WritableComparable,Writable)}.
Applications can use the {@link Reporter} provided to report progress or just indicate that they are alive. In scenarios where the application takes an insignificant amount of time to process individual key/value pairs, this is crucial since the framework might assume that the task has timed-out and kill that task. The other way of avoiding this is to set mapred.task.timeout to a high-enough value (or even zero for no time-outs).
@param key the key.
@param values the list of values to reduce.
@param output to collect keys and combined values.
@param reporter facility to report progress.