Java 如何在Hadoop中手动定义映射器函数的输入拆分

Java 如何在Hadoop中手动定义映射器函数的输入拆分,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我有一个文本文件,我想通过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 </m

我有一个文本文件,我想通过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>

--资料--
---资料
.
.
.
--资料
--资料--
---资料
.
.
.
--资料
我希望映射函数根据主节点进行拆分。这样,每个拆分都有一个主节点及其数据。 所有主节点都以相同的语法开始。 是否可以为映射函数定义这样的输入拆分?
注意:这不是xml文件。尽管它看起来像一个。

看起来您的输入文件是xml格式的。 在这种情况下,您可以将TextInputFormat类替换为XMLInputFormat类。 这意味着映射程序不需要将每一行作为输入,而是将每一个主节点作为输入

查看下面的链接

在以下位置找到一个工作示例:


希望对您有所帮助。

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

Hadoop是一个可插入的系统。
Hadoop确实提供标准的输入格式,如文本、二进制等。。但若您有自定义格式文件,那个么您需要编写自己的InputFormat并实现自定义重编码器来生成输入拆分。如果您实现了这些,那么您可以控制在何处分割数据,并且每个映射器一次摄取一个输入点

,尽管它看起来像xml格式,但并不完全是xml格式。我要说的是,它的xml格式非常糟糕。因此,我无法正确解析它。