- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试在 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 header
。pom.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/
我正在开发一个需要能够平均三个数字的 Facebook 应用程序。但是,它总是返回 0 作为答案。这是我的代码: $y = 100; $n = 250; $m = 300; $number = ($y
我只是无法弄清楚这一点,也找不到任何对我来说有意义的类似问题。我的问题:我从数据库中提取记录,并在我的网页上以每个面板 12 条的倍数显示它们。因此,我需要知道有多少个面板可以使用 JavaScrip
我是一名优秀的程序员,十分优秀!