All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.wizzie.normalizer.funcs.impl.ClassificationMapper Maven / Gradle / Ivy

package io.wizzie.normalizer.funcs.impl;

import io.wizzie.metrics.MetricsManager;
import io.wizzie.normalizer.funcs.MapperFunction;
import org.apache.kafka.streams.KeyValue;

import java.util.List;
import java.util.Map;

import static com.cookingfox.guava_preconditions.Preconditions.checkNotNull;

public class ClassificationMapper extends MapperFunction {

    String dimension;
    String targetDimension;
    List intervals;
    List classification;
    Number unknownValue;

    @Override
    public void prepare(Map properties, MetricsManager metricsManager) {
        dimension = checkNotNull((String) properties.get("dimension"), "dimension cannot be null");
        targetDimension = checkNotNull((String) properties.get("new_dimension"), "new_dimension cannot be null");
        intervals = checkNotNull((List) properties.get("intervals"), "intervals cannot be null");
        classification = checkNotNull((List) properties.get("classification"), "classification cannot be null");
        unknownValue = checkNotNull((Number) properties.get("unknown_value"), "unknown_value cannot be null");
    }

    @Override
    public KeyValue> process(String key, Map value) {

        if (value != null) {
            if (value.containsKey(dimension)) {

                Number data = (Number) value.get(dimension);
                String classificationName = "not_classified";

                if (data == null || data.doubleValue() == unknownValue.doubleValue()) {
                    classificationName = "unknown";
                } else {
                    int i;
                    for (i = 0; i < intervals.size(); i++) {
                        if (data.doubleValue() <= intervals.get(i).doubleValue()) {
                            classificationName = classification.get(i);
                            break;
                        }
                    }

                    if (classificationName.equals("not_classified")) {
                        classificationName = classification.get(i);
                    }
                }
                value.put(targetDimension, classificationName);
            }
        }

        return new KeyValue<>(key, value);
    }

    @Override
    public void stop() {

    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy