Как использовать Evaluators в Java для оценки PMML с помощью org.apache.spark? - PullRequest
0 голосов
/ 07 ноября 2019

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

Теперь я смотрю на замену библиотеки jpmml -valuator-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-Asseattor-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добиться аналогичных результатов.

1 Ответ

0 голосов
/ 08 ноября 2019

Вы можете использовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...