Я выполнял распределенный анализ XML в кластере Hadoop. Я использую этот XmlInputFormat в своих программах уменьшения карты. Это сработало довольно хорошо, и я искренне благодарю этого участника.
Но вот проблема, с которой я столкнулся:
При тестировании этих нескольких заданий с красной картой произошел сбой с указанным ниже 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>"
Я имею дело с журналами, которые содержат такие данные. Но из-за этого вся работа проваливается.
Я могу думать о предварительной обработке как о решении, но это может быть неэффективным вариантом для меня.
Не могли бы вы предложить мне подход, с помощью которого я могу пропустить такие плохие записи или просто заменить такой символ в API Java XML?