如何让XmlInputParser使用自动关闭XML标签?

时间:2014-11-16 16:19:25

标签: hadoop xml-parsing

我正在尝试使用MapReduce将SE data dump *中的XML文件加载到HDFS中。这些XML文件由许多<row>元素组成(包含在顶级&#34;类别&#34;中),如下所示:

<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>

我想要每个&#34;行&#34;要由单独的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>元素是自动关闭的。我怎样才能让这个工作起来,而不是人为地关闭&#34;关闭&#34;自闭标签?

  • 链接到SE博客而不是直接链接到数据转储,以防止将来在位置更改时出现死链接。

1 个答案:

答案 0 :(得分:0)

这是一个有点难看的黑客。更改START_TAG_KEYEND_TAG_KEY,如下所示:

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

“keys”正在像分隔符一样使用,并且接受任何字符串,而不仅仅是XML标记。这不是一个“干净”的解决方案,可能会停止未来的实施,但它现在完成了工作

注意:我在发布问题的中途时想出来了。事后看来这似乎相当明显,但无论如何我决定继续发布帖子,以便将来有人发现它有用。