正如我们所知,Hadoop根据每个键对值进行分组,并将它们发送到相同的reduce任务。假设我在hdfs上的文件中有下一行。 line1么line3…亚麻在映射任务中,我打印文件名和行。在减少,我收到不同的订单。例如key=> {line3, line1, line2,....}现在,我有下一个问题。我想把这个值列表按顺序放在文件中,as key =>{line1, line2,…亚麻}有办法吗?
如果使用TextInputFormat
,则得到<LongWritable, Text>
作为映射器输入。LongWritable
部分(或键)是行在文件中的位置(不是行号,而是从文件开始的位置)。你可以用这个部分来记录哪条线是第一个。例如,映射器可以输出<Filename, TextPair(Position, Line)>
作为输出,而不是像您现在这样输出<Filename, Line>
。然后,您可以根据Pair的第一部分(Position)对reducer获得的键进行排序,并且您应该以相同的顺序返回行。