我有一个文本文件,我想通过mapreduce解析。文件格式如下:
<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函数定义这样的输入分割?注:这不是xml文件,虽然它看起来像一个。
看起来您的输入文件是XML格式的。在这种情况下,您可以将textputformat类替换为XMLInputFormat类。这意味着mapper不是将每一行作为输入,而是将每个main_node作为输入。
查看下面的链接,
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
我认为这是不可能的,你必须通过将issplittable()设置为false来读取整个文件作为单个拆分。
Hadoop是可插拔的系统。Hadoop提供了标准的InputFormat,比如Text, binary等。但是如果你有自定义格式文件,那么你需要编写自己的InputFormat和实现自定义RecorReader来生成输入分割。如果你实现了这些,那么你可以控制在哪里分割数据,每个Mapper一次摄取一个输入吐出