Как использовать оценщики в Java для оценки PMML с помощью org.apache.spark?

Я реализовал код для оценки в предоставленном файле PMML и файле данных csv (линейная регрессия) с помощью Spark и Java. Для этого я использовал артефакты maven jpmml-evalator-spark и spark-mllib_2.11, и он отлично работает.

Теперь я подумываю заменить библиотеку jpmml-evalator-spark, лицензированную AGPL, на что-то подобное, которое может быть объединено в org-apache-spark (или любой другой вариант с полностью открытым исходным кодом). Я не вижу оценщиков для оценки по PMML, доступный в группе зависимостей org.apache.spark. Пожалуйста, подтвердите, правильно ли это, и предложите альтернативу.

https://github.com/jpmml/jpmml-evaluator-spark

Это библиотека оценщика PMML для кластерной вычислительной системы Apache Spark (http://spark.apache.org/) и есть AGPL.

См. Также: http://spark.apache.org/docs/latest/ml-guide.html Они предполагают, что все, что упаковано вместе с apache spark, включает алгоритмы, создание и обучение модели, но оценка модели здесь недоступна, а ее зависимости включены только в jpmml-evalator-spark.

    import org.apache.spark.ml.Transformer;
    import org.apache.spark.sql.Dataset;

    import org.jpmml.evaluator.Evaluator;
    import org.jpmml.evaluator.EvaluatorBuilder;
    import org.jpmml.evaluator.LoadingModelEvaluatorBuilder;
    import org.jpmml.evaluator.spark.TransformerBuilder;
    ...
    ...
    ...
    EvaluatorBuilder evaluatorBuilder = new LoadingModelEvaluatorBuilder().setLocatable(false)
                        .setVisitors(new DefaultVisitorBattery()).load(pmmlInputStream);
    Evaluator evaluator = evaluatorBuilder.build();
    evaluator.verify();

    TransformerBuilder pmmlTransformerBuilder = new TransformerBuilder(evaluator).withLabelCol("Predicted_SpeciesCategory").exploded(true);

    Transformer pmmlTransformer = pmmlTransformerBuilder.build();
    Dataset<?> resultDataset = pmmlTransformer.transform(csvDataset);
    ...
    ...

Зависимости Maven:

    <dependency>
        <groupId>org.jpmml</groupId>
        <artifactId>jpmml-evaluator-spark</artifactId>
        <version>1.2.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.4.3</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-mllib_2.11</artifactId>
        <version>2.4.3</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.jpmml</groupId>
        <artifactId>jpmml-sparkml</artifactId>
        <version>1.5.4</version>
    </dependency>

Этот код по-прежнему зависит от библиотеки org.jpmml, которую я хочу удалить. Ищу альтернативу с использованием библиотеки org.apache.spark для достижения аналогичных результатов.


person user6928132    schedule 07.11.2019    source источник


Ответы (1)


Вы можете использовать PMML4S-Spark, чтобы сравнить модель PMML с Spark, например:

import org.pmml4s.spark.ScoreModel

val model = ScoreModel.fromInputStream(pmmlInputStream)
val resultDataset = model.transform(csvDataset)

Если вы хотите использовать PMML4S-Spark в Java, он также прост в использовании и похож на Scala, например:

import org.pmml4s.spark.ScoreModel;
import org.apache.spark.sql.Dataset;

ScoreModel model = ScoreModel.fromInputStream(pmmlInputStream);
Dataset<?> resultDataset = model.transform(csvDataset);

Кстати, лицензия PMML4S-Spark - APL 2.0.

person PredictFuture    schedule 08.11.2019
comment
Спасибо за это! Но похоже, что эту библиотеку можно использовать только вместе со Scala, а не с Java. Пожалуйста, поправьте меня, если я ошибаюсь. - person user6928132; 08.11.2019
comment
Его определенно можно использовать в Java, см. Пример выше в Java. - person PredictFuture; 11.11.2019