2017-09-24 1 views
1

J'écris une application de démarrage Spring (classe java) qui appelle la méthode H2o predict qui se trouve dans une autre classe java.Récupérer le modèle h2o MOJO (fichier zip) dans une application de démarrage Spring

J'ai testé cette classe java indépendamment et je peux lire le modèle MOJO s'il est au même endroit d'où java est invoqué et je peux faire des prédictions. Avec l'application de démarrage de Spring, cette fois mon jar résultant de la compilation du projet maven ne peut pas lire ce zip. J'utilise le moyen standard pour lire le fichier zip MOJO en utilisant le Wrapper h2o fournit.

EasyPredictModelWrapper model = new EasyPredictModelWrapper(MojoModel.load("DRF_model_python_1504558159175_1.zip")); 

structure du projet Maven Mon ressemble à ceci:

enter image description here

Le pot produit de la chaussure de printemps App contient également le zip comme indiqué ci-dessous:

enter image description here

I ne comprends pas pourquoi il me donne l'erreur (c'est une exception IO) qu'il ne peut pas trouver le fichier zip MOJO.

File DRF_model_python_1504558159175_1.zip cannot be found. 

Je pense que les solutions pourraient être: 1. Ajout quelque chose dans le fichier pom Maven pour que le pot résultante sait où chercher le modèle à partir. OU 2. Si la méthode MojoModel.load accepte un chemin d'accès au fichier plutôt que simplement le nom du fichier. Mais je pense que cela ne fonctionne pas.

Des pensées?

Répondre

1

Vous devez changer la façon dont vous chargez le fichier zip MOJO dans votre projet, à la place vous devez charger le fichier MOJO en tant que flux à partir de la ressource. Vous pouvez suivre ce example où vous pouvez voir comment MOJO est placé dans le dossier de ressources et ensuite addMOJOsFromJARResource est appelé pour inclure MOJO.

Projet: https://github.com/h2oai/h2o-tutorials/tree/f67765bc6c68c2058d4b2786d1bbc627d3b70539/tutorials/hive_udf_template/hive_udf_mojo_template

  1. zip MOJO est stocké dans src/main/resources/modèle
  2. Vous devez faire référence aux cours h2o-genmodel comme ci-dessous pour

`` `

import hex.genmodel.MojoReaderBackendFactory; 
import static hex.genmodel.MojoReaderBackendFactory.CachingStrategy; 
import hex.genmodel.MojoReaderBackend; 
import hex.genmodel.ModelMojoReader; 
  1. Voici la fonction qui comprend tous MOJO.zip (oui, vous pouvez ajouter plusieurs MOJO) dans votre projet

`` `

public void addMOJOsFromJARResource() { 
     try { 
     String[] mojo_names = this.getMOJONames(); 
     for (int i = 0; i < mojo_names.length; i++) { 
      MojoReaderBackend reader = 
       MojoReaderBackendFactory.createReaderBackend(
        getClass().getResourceAsStream(
        "/models/"+mojo_names[i]), 
         MojoReaderBackendFactory.CachingStrategy.MEMORY); 
      MojoModel model = ModelMojoReader.readFrom(reader); 
      this.addModel(model); 
     } 
     } catch (Exception e) { 
     e.printStackTrace(); 
     throw new RuntimeException(); 
     } 
    } 

` `` Cela fonctionne.

+0

Oui cela a fonctionné! Merci Avkash – kivk02