Creating an aggregation
The aggregation
import net.intelie.pipes.Export;
import net.intelie.pipes.Help;
import net.intelie.pipes.SimpleAggregation;
public class HarmonicMean implements SimpleAggregation.Full<HarmonicMean, Double> {
private long count;
private double inverseSum;
@Help(key = "aggregation-harmonicMean") // key is used for standard library functions
@Export("harmonicMean")
public void harmonicMean(double x) {
count++;
inverseSum += 1 / x;
}
@Override
public Double eval() {
if (count == 0) return 0.0;
return count / inverseSum;
}
@Override
public void clear() {
count = 0;
inverseSum = 0;
}
@Override
public void merge(HarmonicMean tree) {
count += tree.count;
inverseSum += tree.inverseSum;
}
@Override
public void unmerge(HarmonicMean tree) {
count -= tree.count;
inverseSum -= tree.inverseSum;
}
}Testing
Last updated