hadoop - 如何在Java UDF中加载H20训练有素的模型

我正在尝试加载经过训练的xgboost模型,以用于用Java编写的自定义UDF中。文件为zip格式,并存储在hdfs中。

我尝试使用Path类读取它,但是它不起作用。

import org.apache.hadoop.fs.Path;

public EasyPredictModelWrapper loadModel(String xgBoostModelFile) {
        if (model == null) {

            synchronized (_lockObject) {
                if (model == null) {
                    log.info("Model has not been loaded, loading ...");
                    try {
                        Path path = new Path(xgBoostModelFile);
                        model = new EasyPredictModelWrapper(MojoModel.load(path)); // Doesn't compile since MojoModel only takes string as an input.
                    } catch (IOException e) {
                        log.error("Got an exception while trying to load xgBoostModel \n", e);
                    }
                }
            }
        }
        return model;
    }

我想成功加载model.zip

最佳答案

在H20松弛社区中得到答案。

FileSystem fs = FileSystem.get(new Configuration());
Path path = new Path(xgBoostModelFile);
FSDataInputStream inputStream = fs.open(path);
MojoReaderBackend mojoReaderBackend = MojoReaderBackendFactory.createReaderBackend(inputStream,CachingStrategy.MEMORY);
model = new EasyPredictModelWrapper(MojoModel.load(mojoReaderBackend));

https://stackoverflow.com/questions/56323049/

相关文章:

hadoop - 关闭电源后重新启动hadoop HA群集节点后,名称节点失败

mongodb - 从BSON文件创建Hive表时,列值变为NULL

docker - 在Bluemix容器上安装卷并在它们之间共享不起作用

docker - 使用RUN的结果来设置变量

hadoop - Hive Joins可以在Apache Nifi中实现吗?

python - 如何在pySpark中从字符串数据框中有效替换多个正则表达式模式的所有实例?

hadoop - 如何在长度大于VARCHAR(32k)的BIGSQL表中存储字符串数据

networking - 从 docker 容器运行 docker build 时主机名解析失败

hadoop - hadoop fs -mkdir:没有这样的目录

hadoop - Hadoop:如何正确停用集群上的节点?