我有一个文本文件,我想通过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文件。尽管它看起来像一个。
答案 0 :(得分:0)
您的输入文件看起来像是XML格式。 在这种情况下,您可以将TextInputFormat类替换为XMLInputFormat类。 这意味着代替mapper将每一行作为输入,它将每个main_node作为输入。
查看下面的链接,
找一个有效的例子 https://github.com/ajaysadhu/XML_MR_Reader
希望它有所帮助。
答案 1 :(得分:0)
我认为不可能,您必须通过将issplittable()设置为false来将整个文件作为单个拆分读取。
答案 2 :(得分:0)
Hadoop是可插拔系统。 Hadoop确实提供标准的InputFormat,如Text,binary等。但是如果你有自定义格式文件,那么你需要编写自己的InputFormat和实现自定义RecorReader来生成输入分割。如果您实现这些,那么您可以控制分割数据的位置,每个Mapper一次摄取一个输入吐出