我正在尝试使用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;自闭标签?
答案 0 :(得分:0)
这是一个有点难看的黑客。更改START_TAG_KEY
和END_TAG_KEY
,如下所示:
config.set(XmlInputFormat.START_TAG_KEY, "<row");
config.set(XmlInputFormat.END_TAG_KEY, "/>");
“keys”正在像分隔符一样使用,并且接受任何字符串,而不仅仅是XML标记。这不是一个“干净”的解决方案,可能会停止未来的实施,但它现在完成了工作。
注意:我在发布问题的中途时想出来了。事后看来这似乎相当明显,但无论如何我决定继续发布帖子,以便将来有人发现它有用。