假设我们有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中,您可以简单地拥有一个计数器,并在需要时更改输出文件名。