2017-09-24 8 views
1

私は別のJavaクラスの中にあるH2o予測メソッドを呼び出すSpringブートアプリケーション(Javaクラス)を作成しています。Springブートアプリケーションでh2o MOJOモデル(zipファイル)を取得する

私はこのJavaクラスを独立してテストしました.MOJOモデルがjavaが呼び出された場所と同じ場所にあり、予測を行うことができる場合、私はMOJOモデルを読むことができます。

春のブートアプリケーションでは、今度はmavenプロジェクトコンパイルの結果の瓶がそのジップを読み取ることができません。 私はWrapper h2oが提供するMOJO zipファイルを読むための標準的な方法を使用します。私は

enter image description here

enter image description here

下図のように春ブーツアプリケーションの生成されたJARにもジップが含まれています

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

私のMavenプロジェクト構造は次のようになりますMOJOのzipファイルを見つけることができないというエラー(IO例外です)がなぜ発生するのか理解できません。

File DRF_model_python_1504558159175_1.zip cannot be found. 

私は解決策があることと思う: 1.結果のjarファイルがどこからモデルをピックアップして知っているように、MavenのPOMファイルで何かを追加します。 OR 2. MojoModel.loadメソッドがファイル名ではなくファイルへのパスを受け入れる場合。しかし、私はこれは動作しないと思う。

どのような考えですか?

答えて

1

プロジェクトでMOJO zipファイルをロードする方法を変更する必要があります。リソースからストリームとしてMOJOファイルをロードする必要があります。これに続いてexampleに移動し、MOJOがリソースフォルダに配置されていることを確認してから、addMOJOsFromJARResourceがMOJOを含むように呼び出されます。

プロジェクト:https://github.com/h2oai/h2o-tutorials/tree/f67765bc6c68c2058d4b2786d1bbc627d3b70539/tutorials/hive_udf_template/hive_udf_mojo_template

  1. MOJOのzipはSRC /メイン/リソース/モデル
  2. で保存されますが

`` `

に以下のようにH2O-genmodelのクラスを参照する必要があります
import hex.genmodel.MojoReaderBackendFactory; 
import static hex.genmodel.MojoReaderBackendFactory.CachingStrategy; 
import hex.genmodel.MojoReaderBackend; 
import hex.genmodel.ModelMojoReader; 
  1. ここに、すべてMOJO.zipを含むプロジェクト

`` `

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(); 
     } 
    } 

` `` これがうまくいくに(はい、あなたは複数のMOJOを追加することができます)。

+0

はいこれが機能しました!おかげでAvkash – kivk02

関連する問題