}
@Override
protected void reduce(AvroKey<AttemptStatsKey> key, Iterable<AvroValue<AttemptStatsValue>> values, final Context context) throws IOException, InterruptedException
{
AttemptStatsValue merged = new AttemptStatsValue();
merged.setElapsedMinutes(0.0);
merged.setStarted(0);
merged.setFinished(0);
for (AvroValue<AttemptStatsValue> valueWrapped : values)
{
AttemptStatsValue value = valueWrapped.datum();
merged.setElapsedMinutes(value.getElapsedMinutes() + merged.getElapsedMinutes());
merged.setStarted(value.getStarted() + merged.getStarted());
merged.setFinished(value.getFinished() + merged.getFinished());
if (value.getCpuMinutes() != null)
{
if (merged.getCpuMinutes() == null)
{
merged.setCpuMinutes(value.getCpuMinutes());
}
else
{
merged.setCpuMinutes(merged.getCpuMinutes() + value.getCpuMinutes());
}
}
if (value.getSpilledRecords() != null)
{
if (merged.getSpilledRecords() == null)
{
merged.setSpilledRecords(value.getSpilledRecords());
}
else
{
merged.setSpilledRecords(merged.getSpilledRecords() + value.getSpilledRecords());
}
}
if (value.getReduceShuffleBytes() != null)
{
if (merged.getReduceShuffleBytes() == null)
{
merged.setReduceShuffleBytes(value.getReduceShuffleBytes());
}
else
{
merged.setReduceShuffleBytes(merged.getReduceShuffleBytes() + value.getReduceShuffleBytes());
}
}
}
context.write(key, new AvroWrapper<AttemptStatsValue>(merged));