我有一个文本文件,我想通过map reduce解析它。文件的格式如下:
<main node>
<type 1> --data--
<type 2> ---data
.
.
.
<type n> --data
</main node>
<main node>
<type 1> --data--
<type 2> ---data
.
.
.
<type n> --data
</main node>
我想Map功能分裂根据主节点..这样,每个分裂正好有一个主节点和它的数据。所有主节点都以相同的语法开始。是否可以为map函数定义这样的输入分割?p、 这不是xml文件..虽然看起来像。
3条答案
按热度按时间ffvjumwh1#
hadoop是一个可插拔的系统。hadoop确实提供了标准的输入格式,比如文本、二进制等。。但如果您有自定义格式文件,那么您需要编写自己的inputformat并实现自定义recorreader来生成输入拆分。如果您实现了这些,那么您可以控制在何处分割数据,并且每个Map器一次接收一个输入信号
fquxozlt2#
看起来您的输入文件是xml格式的。在这种情况下,可以将textinputformat类替换为xmlinputformat类。这意味着mapper不获取每一行作为输入,而是获取每一个主节点作为输入。
查看下面的链接,
https://svn.apache.org/repos/asf/mahout/trunk/integration/src/main/java/org/apache/mahout/text/wikipedia/xmlinputformat.java
找到一个工作的例子https://github.com/ajaysadhu/xml_mr_reader
希望对你有帮助。
nsc4cvqm3#
我认为这是不可能的,您必须通过将issplittable()设置为false来将整个文件作为一个单独的拆分来读取。