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



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

  • 是否可以使用单个MR作业来完成此操作
  • 我们应该打开文件以便在reducer中显式写入
  • 输出中的记录应该被打乱

谢谢,
Paramesh

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

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

在映射器中,发出介于1和10之间的Key(这是输出文件的数量),并将该值作为输入记录发出。请确保映射器发出的关键帧在1和10之间保持平衡,并且不会倾斜。

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

相关内容

  • 没有找到相关文章