如何在hadoop / map中创建具有固定行数的输出文件reduce?

时间:2013-12-13 21:00:45

标签: hadoop mapreduce

假设我们有N个不同行数的输入文件。我们需要生成输出文件,例如每个输出文件具有恰好K行数(除了最后一行可以具有< K记录)。

  • 是否可以使用单个MR作业执行此操作?
  • 我们应该在reducer中明确打开文件。
  • 输出中的记录应该随机播放。

感谢,
Paramesh

2 个答案:

答案 0 :(得分:1)

假设输入文件有990条记录,必须分成9个文件,每个文件有100条记录,最后一条文件有90条记录。共10个文件

使用NLineInputFormat并将mapred.line.input.format.linespermap设置为100.这样每个映射器将处理来自输入数据集的100行。将reducers的数量设置为10,即输出文件的数量。

在映射器中,发出1到10之间的密钥(这是输出文件的数量),并将值作为输入记录发出。确保映射器发出的键平衡在1到10之间,而不是倾斜。

答案 1 :(得分:0)

另一种方法是使用单个reducer并使用multipleoutputformat生成多个输出文件。 在该reducer中,您只需要一个计数器,并在需要时更改输出文件名。