Java 在Spring boot应用程序中选择h2o MOJO模型(zip文件)
我正在编写一个SpringBoot应用程序(java类),它调用另一个java类中的H2OPredict方法 我已经独立测试了这个java类,如果MOJO模型位于调用java的同一位置,我可以读取它,并且可以进行预测 使用SpringBoot应用程序,这次我的maven项目编译的结果jar无法读取该zip。 我使用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
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 项目:
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();
}
}