2011-09-26 86 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