gpt4 book ai didi

java - MapReduce程序中的XMLParser失败,并显示以下消息:实体名称必须立即在实体引用中的 '&'之后。

转载 作者:行者123 更新时间:2023-12-02 21:53:45 24 4
gpt4 key购买 nike

我一直在hadoop集群上执行分布式XML解析。我在 map 缩减程序中使用this XmlInputFormat。效果很好,由衷地感谢那个贡献者。

但是,这是我遇到的问题:

在测试这几个 map 红色作业时,以下XMLStreamException失败。

java.io.IOException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[21,69]
Message: The entity name must immediately follow the '&' in the entity reference.
at org.apache.hadoop.examples.XMLRecordCount$Map.map(XMLRecordCount.java:197)
at org.apache.hadoop.examples.XMLRecordCount$Map.map(XMLRecordCount.java:1)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:214)
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[21,69]
Message: The entity name must immediately follow the '&' in the entity reference.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:594)
at org.apache.hadoop.examples.XMLRecordCount$Map.map(XMLRecordCount.java:168)

据我了解,这是由于字符和数据中的原因引起的。例如- "<name>Alen & Bob </name>"
我正在处理包含上述数据的日志。但是正因为如此,整个工作都失败了。

我可以将预处理视为解决方案,但对我来说可能不是一个有效的选择。

您能建议我一种方法来跳过此类不良记录/或仅替换Java XML api中的此类字符吗?

最佳答案

map函数(在您发布的the example中)中,无需捕获并重新抛出任何异常,只需捕获XMLStreamException而在catch块中不执行任何操作。什么也不会发出,并且作业不会失败。但是,您可能想增加一个计数器来跟踪无效记录。

伪代码:

  protected void map(LongWritable key, Text value, Mapper.Context context) throws IOException
try {
XMLStreamReader reader = ...
context.write(...);
} catch(XMLStreamException e){
// do nothing
context.getCounter(INVALID_RECORDS).increment(1);
}
}

关于java - MapReduce程序中的XMLParser失败,并显示以下消息:实体名称必须立即在实体引用中的 '&'之后。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17404628/

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