正如我们所知,Hadoop使用每个键对值进行分组,并将它们发送到相同的reduce任务。 假设我在hdfs上的文件中有下一行。 的 LINE1 2号线 3号线 .... 亚麻 在map任务中我打印文件名和行。 在减少我收到不同的order.for examle key => {line3,line1,line2,....} 现在,我有下一个问题。我想得到这个值列表,以便它们位于文件中, as key => {line1,line2,... linen} 有没有办法做到这一点?
答案 0 :(得分:2)
如果您使用TextInputFormat
,则会获得<LongWritable, Text>
作为映射器输入。 LongWritable
部分(或键)是文件中行的位置(非行号,但我认为文件起始位置)。您可以使用该部分来跟踪第一行。例如,映射器可以输出<Filename, TextPair(Position, Line)>
作为输出而不是<Filename, Line>
,就像您现在所做的那样。然后,您可以根据对的第一部分(位置)对缩减器获得的键进行排序,您应该以相同的顺序返回行。