gpt4 book ai didi

java - 如何在映射器的 hdfs 中加载 SR 解析器文件?

转载 作者:可可西里 更新时间:2023-11-01 14:36:51 25 4
gpt4 key购买 nike

我正在尝试在 mapreduce 程序中使用 CoreNLP 项目来查找存储在 hbase 表中的大量文本的情绪。我正在使用 SR 解析器进行解析。模型文件存储在 /user/root/englishSR.ser.gz 的 hdfs 中。我在 mapreduce 应用程序代码中添加了以下行

 job.addCacheFile(new URI("/user/root/englishSR.ser.gz#model"));

现在在映射器中

 props.setProperty("parse.model", "./model");

我收到 edu.stanford.nlp.io.RuntimeIOException: java.io.StreamCorruptedException: invalid stream headerpom.xml 文件包含

<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>3.4.1</version>
<classifier>models</classifier>
</dependency>

我已尝试将文件添加到 resources 并添加到 maven,所有这些都导致 GC overhead limit exceeded 或 Java Heap 问题。

最佳答案

我不太了解 hadoop,但我怀疑您混淆了 CoreNLP 对 SR 解析器模型的压缩。

首先在不使用 Hadoop 的情况下尝试这个:

java -mx4g edu.stanford.nlp.parser.shiftreduce.ShiftReduceParser -serializedPath /user/root/englishSR.ser.gz

看看是否能正常加载解析器。如果是这样,它应该打印类似下面的内容并退出(否则,它将抛出异常...)。

Loading parser from serialized file edu/stanford/nlp/models/srparser/englishSR.ser.gz ... done [10.4 sec].

如果能正常加载解析器,那么模型文件就没有问题。我认为问题在于 CoreNLP 只是使用文件或资源名称是否以“.gz”结尾来决定它是否被压缩,因此它错误地解释了该行:

props.setProperty("parse.model", "./model");

就像加载一个非 gzip 模型一样。所以我希望以下一项或多项工作:

cd /user/root ; gunzip englishSR.ser.gz

job.addCacheFile(new URI("/user/root/englishSR.ser#model"));

props.setProperty("parse.model", "./model");

或者:

job.addCacheFile(new URI("/user/root/englishSR.ser#model.gz"));

props.setProperty("parse.model", "./model.gz");

关于java - 如何在映射器的 hdfs 中加载 SR 解析器文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36370374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com