假设我们有N个不同行数的输入文件。我们需要生成输出文件,例如每个输出文件具有恰好K行数(除了最后一行可以具有< K记录)。
感谢,
Paramesh
答案 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中,您只需要一个计数器,并在需要时更改输出文件名。