如何让xmlinputparser使用自动关闭的xml标记?

llmtgqce  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(359)

我正在尝试使用mapreduce将xml文件从se data dump*加载到hdfs中。这些xml文件由许多 <row> 元素(包含在顶级“类别”中),例如:

<badges>
  <row Id="1" UserId="1" Name="Organizer" Date="2009-07-15T06:51:46.370" />
  <row Id="2" UserId="3" Name="Organizer" Date="2009-07-15T06:51:46.387" />
  <row Id="4" UserId="1" Name="Autobiographer" Date="2009-07-15T06:51:46.447" />
  ...
</badges>

我希望每个“行”都由一个单独的 map() 功能,并已配置 org.apache.mahout.classifier.bayes.XmlInputFormat 的开始和结束标记如下:

Configuration config = new Configuration();
config.set(XmlInputFormat.START_TAG_KEY, "<row>");
config.set(XmlInputFormat.END_TAG_KEY, "</row>");

但是,这无法解析xml文件,因为 <row> 元素是自动关闭的。我如何让它工作,没有人为地“关闭”自动关闭标签?
链接到se博客而不是直接到数据转储,以防止死链接,以防将来位置发生变化。

t98cgbkg

t98cgbkg1#

这是一个有点丑陋的黑客。更改 START_TAG_KEY 以及 END_TAG_KEY 具体如下:

config.set(XmlInputFormat.START_TAG_KEY, "<row");
config.set(XmlInputFormat.END_TAG_KEY, "/>");

“键”被用作分隔符,接受任何字符串,而不仅仅是xml标记。不是一个“干净”的解决方案,可能会停止在未来的实现工作,但它现在就完成了工作。
注意:我是在发帖的时候发现的。事后看来,这一点很明显,但我还是决定继续写这篇文章,以便将来有人会发现它有用。

相关问题