Adjusted storeElement() method of ParallelGroupedNumberPairDataAverageAggregationProcessor

This commit is contained in:
Leon Radeck committed 2018-04-16 15:22:01 +10:00
1 parent 26fc468f0b
commit 78a331c597
1 file changed
+23 -20
@@ -7,18 +7,14 @@ import java.util.Map.Entry;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.atomic.AtomicLong;
import org.omg.CORBA.DoubleHolder;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.datamining.components.AggregationProcessorDefinition;
import com.sap.sse.datamining.components.Processor;
import com.sap.sse.datamining.impl.components.GroupedDataEntry;
import com.sap.sse.datamining.impl.components.SimpleAggregationProcessorDefinition;
import com.sap.sse.datamining.shared.GroupKey;
import com.sap.sse.datamining.shared.data.AverageWithStats;
import com.sap.sse.datamining.shared.data.AveragePairWithStats;
import com.sap.sse.datamining.shared.impl.AveragePairWithStatsImpl;
import com.sap.sse.datamining.shared.impl.AverageWithStatsImpl;
public class ParallelGroupedNumberPairDataAverageAggregationProcessor
extends AbstractParallelGroupedDataStoringAggregationProcessor<Pair, AveragePairWithStats<Number>> {
@@ -55,20 +51,27 @@ public class ParallelGroupedNumberPairDataAverageAggregationProcessor
incrementElementAmount(element);
// concurrency is not an issue here; needsSynchronization() returns true
Pair<Number, Number> aggregate = sumPerKey.get(element.getKey());
final double doubleValueA = ((Number) element.getDataEntry().getA()).doubleValue();
final double doubleValueB = ((Number) element.getDataEntry().getA()).doubleValue();
if (aggregate == null) {
aggregate = new Pair<>(doubleValueA, doubleValueB);
sumPerKey.put(element.getKey(), aggregate);
} else {
sumPerKey.put(element.getKey(), new Pair<>(((Number) element.getDataEntry().getA()).doubleValue() + doubleValueA,((Number) element.getDataEntry().getB()).doubleValue() + doubleValueB));
}
if (!minPerKey.containsKey(element.getKey()) || doubleValueA < minPerKey.get(element.getKey()).getA().doubleValue() && doubleValueB < minPerKey.get(element.getKey()).getB().doubleValue()) {
minPerKey.put(element.getKey(), new Pair<>(doubleValueA, doubleValueB));
}
if (!maxPerKey.containsKey(element.getKey()) || doubleValueA > maxPerKey.get(element.getKey()).getA().doubleValue() && doubleValueB > maxPerKey.get(element.getKey()).getB().doubleValue()) {
maxPerKey.put(element.getKey(), new Pair<>(doubleValueA, doubleValueB));
}
Number a = ((Number) element.getDataEntry().getA());
Number b = ((Number) element.getDataEntry().getB());
final Double doubleValueA = a == null ? null : a.doubleValue();
final Double doubleValueB = b == null ? null : b.doubleValue();
if (doubleValueA != null && doubleValueB != null) {
if(aggregate == null) {
aggregate = new Pair<>(doubleValueA, doubleValueB);
sumPerKey.put(element.getKey(), aggregate);
}
else {
sumPerKey.put(element.getKey(), new Pair<>(doubleValueA + aggregate.getA().doubleValue(),doubleValueB + aggregate.getB().doubleValue()));
}
if (!minPerKey.containsKey(element.getKey()) || doubleValueA < minPerKey.get(element.getKey()).getA().doubleValue() && doubleValueB < minPerKey.get(element.getKey()).getB().doubleValue()) {
minPerKey.put(element.getKey(), new Pair<>(doubleValueA, doubleValueB));
}
if (!maxPerKey.containsKey(element.getKey()) || doubleValueA > maxPerKey.get(element.getKey()).getA().doubleValue() && doubleValueB > maxPerKey.get(element.getKey()).getB().doubleValue()) {
maxPerKey.put(element.getKey(), new Pair<>(doubleValueA, doubleValueB));
}
}
}
}
@@ -88,12 +91,12 @@ public class ParallelGroupedNumberPairDataAverageAggregationProcessor
Map<GroupKey, AveragePairWithStats<Number>> result = new HashMap<>();
for (Entry<GroupKey, Pair<Number, Number>> sumAggregationEntry : sumPerKey.entrySet()) {
GroupKey key = sumAggregationEntry.getKey();
result.put(key, new AveragePairWithStatsImpl<Number>(new Pair<>(sumAggregationEntry.getValue().getA().doubleValue() / elementAmountPerKey.get(key).get(),sumAggregationEntry.getValue().getB().doubleValue() / elementAmountPerKey.get(key).get()),
result.put(key, new AveragePairWithStatsImpl<Number>(new Pair<>(sumAggregationEntry.getValue().getA() != null ? sumAggregationEntry.getValue().getA().doubleValue() / elementAmountPerKey.get(key).get() : null, sumAggregationEntry.getValue().getB() != null ? sumAggregationEntry.getValue().getB().doubleValue() / elementAmountPerKey.get(key).get() : null) ,
minPerKey.get(key), maxPerKey.get(key),
/* median */ null,
/* standardDeviation */ null,
/* count */ elementAmountPerKey.get(key).get(),
Number.class.getName()));
Pair.class.getName()));
}
return result;
}