package eu.dnetlib.iis.common.counter;
import org.apache.spark.AccumulableParam;
import scala.Tuple2;
/**
* Spark {@link AccumulableParam} for tracking multiple counter values using {@link NamedCounters}.
*
* @author madryk
*/
public class NamedCountersAccumulableParam implements AccumulableParam<NamedCounters, Tuple2<String,Long>> {
private static final long serialVersionUID = 1L;
//------------------------ LOGIC --------------------------
/**
* Increments {@link NamedCounters} counter with the name same as the first element of passed incrementValue tuple
* by value defined in the second element of incrementValue tuple.
*/
@Override
public NamedCounters addAccumulator(NamedCounters counters, Tuple2<String, Long> incrementValue) {
counters.increment(incrementValue._1, incrementValue._2);
return counters;
}
/**
* Merges two passed {@link NamedCounters}.
*/
@Override
public NamedCounters addInPlace(NamedCounters counters1, NamedCounters counters2) {
for (String counterName2 : counters2.counterNames()) {
counters1.increment(counterName2, counters2.currentValue(counterName2));
}
return counters1;
}
/**
* Returns passed initialCounters value without any modifications.
*/
@Override
public NamedCounters zero(NamedCounters initialCounters) {
return initialCounters;
}
}