当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot应用程序中获取h2o MOJO模型(zip文件)

阎知
2023-03-14

我正在编写一个Spring Boot应用程序(java类),它调用另一个java类中的H2o predict方法。

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

使用Spring boot App,这一次我的maven项目编译的结果jar无法读取该zip。我使用标准的方式使用h2o提供的包装器读取MOJO zip文件。

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

File DRF_model_python_1504558159175_1.zip cannot be found.

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

有什么想法吗?

共有1个答案

邹宣
2023-03-14

您需要改变在项目中加载MOJO zip文件的方式,而需要将MOJO文件作为流从资源加载。您可以遵循这个示例,在这里您可以看到如何将MOJO放入资源文件夹,然后调用addMOJOsFromJARResource来包含MOJO。

项目:https://github.com/h2Oai/h2O-tutorials/tree/f67765bc6c68c2058d4b2786d1bbc627d3b70539/tutorials/hive_udf_template/hive_udf_mojo_template

  1. Mojo zip存储在src/main/resources/model
  2. 您需要如下所示引用h2o-genmodel类到

```

 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();
        }
    }
 类似资料:
  • 要获取请求URL,可以在堆栈溢出中找到以下方法。 第一种方法: 第二种方法: 第三种方法: 我不知道在spring boot应用程序中使用哪一个来获取请求URL。 如果我使用第三种方法,那么我是否需要在配置类中创建RequestContextListener的bean,如下所示?

  • 问题内容: 因此,我在MyApp文件夹中有一个models.py文件: 它可以是大约10-15课。 如何在MyApp中查找所有模型并获取其名称? 由于模型是不可迭代的,因此我什至不知道这是否可行。 问题答案: 对于较新版本的Django,请在下面查看Sjoerd答案 这是完成你想要做的事情的最佳方法: 在此示例中,model是实际模型,因此你可以使用它做很多事情:

  • 问题内容: 在我的Spring应用程序中,我想使用FreeMarker生成将由我的应用程序发送的电子邮件文本。生成的文本将永远不会返回到视图,因此我不需要配置FreeMarker视图解析器。该文档似乎表明我应该像这样配置FreeMarkerConfigurationFactoryBean 配置完该bean之后,实际上如何获取具有特定变量Map的特定模板生成的文本。换句话说,之后是什么代码: Spr

  • 问题内容: 您能否解释一下如何在我的子类中获取实例?可能吗?我已尝试按照以下代码片段的方式进行操作,但它似乎不起作用- 未设置: web.xml: 问题是我需要从中获取上下文参数。如果有其他方法,请给我一个提示,我将不胜感激。 我了解注记可能并非为此目的。实际上,我不需要自己。如果只有我可以从web.xml中获取上下文参数,我将非常高兴。 这是我真正需要的一个例子: 谢谢。 问题答案: 从Jers

  • 我有两个应用程序:同事和服务,每个都有自己的模型 在coworkers models.py中,我可以“从services.models导入服务”。 当我尝试在services models.py中“from coworkers.models import Status”时,会收到以下错误消息: 回溯(最近一次调用):文件“/Users/lucas/Documents/projetos/cwk-ma