2011-09-26 81 views
1

正如我们所知,Hadoop按每个键将值分组并将它们发送到相同的reduce任务。 假设我在hdfs文件中有下一行。 一号线2号线 3号线 .... 亚麻 在地图任务我打印文件名和行。 在减少我收到不同orders.for检查键=> {line3,line1,line2,....} 现在,我有下一个问题。我想要得到这个值列表,以便它们位于文件中, 为key => {line1,line2,... linen} 有没有这样做的方法?映射减少值列表顺序问题

回答

2

如果您使用的是TextInputFormat,则会得到<LongWritable, Text>作为映射器输入。 LongWritable部分(或关键字)是文件中行的位置(不是行号,但是我认为文件起始位置)。您可以使用该部分来跟踪哪一行是第一个。例如,映射器可以输出​​作为输出而不是<Filename, Line>,如现在所做的那样。然后,您可以根据Pair(位置)的第一部分对Reducer获取的键进行排序,并且应该按照相同的顺序取回这些行。

+0

谢谢您的回答 – ali

+0

如果有多个减速器,那么这些生产线将转到不同的减速器。如果使用这种方法,I/P和O/P的顺序应该相同,那么应该只有一个减速器。 –

+0

不Praveen,你不是正确的我想,我会用api直接输出到hdfs,因此我会有正确的文件 – ali