2017-10-15 126 views
-1

如果輸入文件是量:1,1,2,2,3,4,4,4,5,5,5,5,6,6,6,然後的MapReduce的輸出應爲(即,該組唯一整數{1,2,3,4,5,6}的大小)。MapReduce的:給定號碼的文件,輸出不同的/唯一號碼

我需要實施上述的幫助。我知道我們可以通過發送每個數字與map()中的空值來過濾出重複項,然後類似地將密鑰與reduce()中的空值輸出到結果文件/控制檯。

但是如果我直接需要得到不同數字的數量,我該如何處理這個問題?

我目前的實現是建立一個Set,將它作爲Mapper的輸出,並且在Reducer中,將所有傳遞給它的集合合併,並返回結果Set的計數。請注意,這更像是一個設計問題,而不是一個特定於圖書館(比如說Hadoop)的實現問題。

+0

聽起來不錯。現在,代碼在哪裏? Stackoverflow不是代碼編寫服務 –

+0

添加了一些關於我所知道的內容以及我迄今爲止能夠理解的內容。 – Daksh

+0

爲什麼你需要爲此減少地圖縮小?具體*減少*?這是一個僅映射操作來過濾重複項並寫入它們的數量 –

回答

0

使用映射器來構建Hashset。進行IntWritable和NullWritable的輸出。

將所有輸入值添加到設置。

寫出Hashset的大小。

將Reduce Tasks的數量設置爲0,因爲它不是必需的。


如果您必須使用Reducer,則從映射器輸出(null,value)。

和上面一樣。


替代(簡單)的方式存在,如果你可以使用蜂巢,豬,或Spark