Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring boot应用程序中选择h2o MOJO模型(zip文件)_Java_Maven_Spring Boot_Machine Learning_H2o - Fatal编程技术网

Java 在Spring boot应用程序中选择h2o MOJO模型(zip文件)

Java 在Spring boot应用程序中选择h2o MOJO模型(zip文件),java,maven,spring-boot,machine-learning,h2o,Java,Maven,Spring Boot,Machine Learning,H2o,我正在编写一个SpringBoot应用程序(java类),它调用另一个java类中的H2OPredict方法 我已经独立测试了这个java类,如果MOJO模型位于调用java的同一位置,我可以读取它,并且可以进行预测 使用SpringBoot应用程序,这次我的maven项目编译的结果jar无法读取该zip。 我使用h2o提供的包装器以标准方式读取MOJO zip文件 EasyPredictModelWrapper model = new EasyPredictModelWrapper(MojoM

我正在编写一个SpringBoot应用程序(java类),它调用另一个java类中的H2OPredict方法

我已经独立测试了这个java类,如果MOJO模型位于调用java的同一位置,我可以读取它,并且可以进行预测

使用SpringBoot应用程序,这次我的maven项目编译的结果jar无法读取该zip。 我使用h2o提供的包装器以标准方式读取MOJO zip文件

EasyPredictModelWrapper model = new EasyPredictModelWrapper(MojoModel.load("DRF_model_python_1504558159175_1.zip"));
我的Maven项目结构如下所示:

Spring boot应用程序生成的jar还包含zip,如下所示:

我不明白为什么它会给我一个错误(这是一个IOexception),它找不到MOJO zip文件

File DRF_model_python_1504558159175_1.zip cannot be found.
我认为解决办法可以是: 1.在Maven pom文件中添加一些内容,以便生成的jar知道从何处获取模型。 或 2.如果MojoModel.load方法接受文件的路径而不仅仅是文件名。但我认为这是行不通的


有什么想法吗?

您需要更改在项目中加载MOJO zip文件的方式,而不是从资源中将MOJO文件作为流加载。您可以在下面的步骤中看到如何将MOJO放入资源文件夹,然后调用addMOJOsFromJARResource来包含MOJO

项目:

  • mojozip存储在src/main/resources/model中
  • 您需要引用h2o genmodel类,如下所示
  • ```

  • 下面是包含所有MOJO.zip(是的,您可以添加多个MOJO)到项目中的函数
  • ```

    public void addMOJOsFromJARResource(){
    试一试{
    字符串[]mojo_name=this.getMOJONames();
    for(int i=0;i
    ```
    这会奏效的

    我是否可以在代码中使用mojo模型,而不是下载它并再次将其读取到project中?我可以使用如下伪代码:Mojo Mojo=h2o.getMojo(**);
     import hex.genmodel.MojoReaderBackendFactory;
     import static hex.genmodel.MojoReaderBackendFactory.CachingStrategy;
     import hex.genmodel.MojoReaderBackend;
     import hex.genmodel.ModelMojoReader;
    
      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();
            }
        }