如何在Hadoop中手动定义mapper函数的输入拆分

时间:2015-09-23 17:34:13

标签: java hadoop mapreduce

我有一个文本文件,我想通过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函数定义这样的输入分割? 附:这不是xml文件。尽管它看起来像一个。

3 个答案:

答案 0 :(得分:0)

您的输入文件看起来像是XML格式。 在这种情况下,您可以将TextInputFormat类替换为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

希望它有所帮助。

答案 1 :(得分:0)

我认为不可能,您必须通过将issplittable()设置为false来将整个文件作为单个拆分读取。

答案 2 :(得分:0)

Hadoop是可插拔系统。 Hadoop确实提供标准的InputFormat,如Text,binary等。但是如果你有自定义格式文件,那么你需要编写自己的InputFormat和实现自定义RecorReader来生成输入分割。如果您实现这些,那么您可以控制分割数据的位置,每个Mapper一次摄取一个输入吐出