Search in sources :

Example 6 with Evaluator

use of org.jpmml.evaluator.Evaluator in project openscoring by openscoring.

the class ModelRegistry method store.

public void store(Model model, OutputStream os) throws JAXBException {
    Evaluator evaluator = model.getEvaluator();
    if (evaluator instanceof HasPMML) {
        HasPMML hasPMML = (HasPMML) evaluator;
        PMML pmml = hasPMML.getPMML();
        marshal(pmml, os);
    }
}
Also used : HasPMML(org.jpmml.evaluator.HasPMML) PMML(org.dmg.pmml.PMML) HasPMML(org.jpmml.evaluator.HasPMML) Evaluator(org.jpmml.evaluator.Evaluator)

Example 7 with Evaluator

use of org.jpmml.evaluator.Evaluator in project openscoring by openscoring.

the class ModelResource method doEvaluate.

@SuppressWarnings(value = "resource")
private List<EvaluationResponse> doEvaluate(String id, List<EvaluationRequest> requests, boolean allOrNothing, String method) {
    Model model = this.modelRegistry.get(id, true);
    if (model == null) {
        throw new NotFoundException("Model \"" + id + "\" not found");
    }
    List<EvaluationResponse> responses = new ArrayList<>();
    Timer timer = this.metricRegistry.timer(createName(id, method));
    Timer.Context context = timer.time();
    try {
        Evaluator evaluator = model.getEvaluator();
        if (evaluator instanceof HasGroupFields) {
            HasGroupFields hasGroupFields = (HasGroupFields) evaluator;
            List<InputField> groupFields = hasGroupFields.getGroupFields();
            if (groupFields.size() == 1) {
                InputField groupField = groupFields.get(0);
                requests = aggregateRequests(groupField.getName(), requests);
            } else if (groupFields.size() > 1) {
                throw new EvaluationException("Too many group fields");
            }
        }
        for (EvaluationRequest request : requests) {
            EvaluationResponse response;
            try {
                response = evaluate(evaluator, request);
            } catch (Exception e) {
                if (allOrNothing) {
                    throw e;
                }
                response = new EvaluationResponse(request.getId());
                response.setMessage(e.toString());
            }
            responses.add(response);
        }
    } catch (Exception e) {
        logger.error("Failed to evaluate", e);
        throw new BadRequestException(e);
    }
    context.stop();
    Counter counter = this.metricRegistry.counter(createName(id, "records"));
    counter.inc(responses.size());
    return responses;
}
Also used : InputField(org.jpmml.evaluator.InputField) ArrayList(java.util.ArrayList) NotFoundException(javax.ws.rs.NotFoundException) EvaluationResponse(org.openscoring.common.EvaluationResponse) BatchEvaluationResponse(org.openscoring.common.BatchEvaluationResponse) EvaluationException(org.jpmml.evaluator.EvaluationException) Evaluator(org.jpmml.evaluator.Evaluator) BadRequestException(javax.ws.rs.BadRequestException) InternalServerErrorException(javax.ws.rs.InternalServerErrorException) JAXBException(javax.xml.bind.JAXBException) NotFoundException(javax.ws.rs.NotFoundException) IOException(java.io.IOException) EvaluationException(org.jpmml.evaluator.EvaluationException) HasGroupFields(org.jpmml.evaluator.HasGroupFields) EvaluationRequest(org.openscoring.common.EvaluationRequest) BatchEvaluationRequest(org.openscoring.common.BatchEvaluationRequest) Counter(com.codahale.metrics.Counter) Timer(com.codahale.metrics.Timer) BadRequestException(javax.ws.rs.BadRequestException)

Example 8 with Evaluator

use of org.jpmml.evaluator.Evaluator in project storm by apache.

the class JpmmlModelOutputs method create.

// ======
private static ModelOutputs create(PMML pmmlModel, List<String> streams) {
    final Set<String> fieldNames = new LinkedHashSet<>();
    final Evaluator evaluator = JpmmlFactory.newEvaluator(pmmlModel);
    for (FieldName predictedField : evaluator.getPredictedFields()) {
        fieldNames.add(predictedField.getValue());
    }
    for (FieldName outputField : evaluator.getOutputFields()) {
        fieldNames.add(outputField.getValue());
    }
    final Map<String, Fields> toDeclare = streams.stream().collect(Collectors.toMap(Function.identity(), (x) -> new Fields(new ArrayList<>(fieldNames))));
    return new JpmmlModelOutputs(toDeclare);
}
Also used : LinkedHashSet(java.util.LinkedHashSet) Evaluator(org.jpmml.evaluator.Evaluator) JpmmlFactory(org.apache.storm.pmml.runner.jpmml.JpmmlFactory) PMML(org.dmg.pmml.PMML) Set(java.util.Set) ModelOutputs(org.apache.storm.pmml.model.ModelOutputs) Fields(org.apache.storm.tuple.Fields) Utils(org.apache.storm.utils.Utils) Function(java.util.function.Function) Collectors(java.util.stream.Collectors) File(java.io.File) ArrayList(java.util.ArrayList) Objects(java.util.Objects) FieldName(org.dmg.pmml.FieldName) List(java.util.List) Map(java.util.Map) Collections(java.util.Collections) LinkedHashSet(java.util.LinkedHashSet) InputStream(java.io.InputStream) Fields(org.apache.storm.tuple.Fields) Evaluator(org.jpmml.evaluator.Evaluator) FieldName(org.dmg.pmml.FieldName)

Aggregations

Evaluator (org.jpmml.evaluator.Evaluator)8 ArrayList (java.util.ArrayList)6 ByteArrayInputStream (java.io.ByteArrayInputStream)4 ModelEvaluator (org.jpmml.evaluator.ModelEvaluator)4 PMMLManager (org.jpmml.manager.PMMLManager)4 FieldName (org.dmg.pmml.FieldName)3 PMML (org.dmg.pmml.PMML)3 OutputField (org.dmg.pmml.OutputField)2 ResultFeatureType (org.dmg.pmml.ResultFeatureType)2 HasPMML (org.jpmml.evaluator.HasPMML)2 Counter (com.codahale.metrics.Counter)1 Timer (com.codahale.metrics.Timer)1 HashingInputStream (com.google.common.hash.HashingInputStream)1 CountingInputStream (com.google.common.io.CountingInputStream)1 File (java.io.File)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 Collections (java.util.Collections)1 LinkedHashSet (java.util.LinkedHashSet)1 List (java.util.List)1