2015-04-05 49 views
0

函數映射,在通常你會得到一個(K,V)與output.collect(K,V)如何在一個映射器中獲得多個輸出(k,v)?

,但我如何得到許多(K,V)在一個機能的研究地圖

我試過迴路這樣的:

for (int i = 0; i < liste_cle.length; i++) 
     { 
      if (cle_R.equals(liste_cle[i].cle)) 
      { 
       ListIterator iterator = liste_cle[i].l.listIterator(); 
       while(iterator.hasNext()) 
       output.collect(new Text(iterator.next().toString()), new Text(val_R)); 
      } 
     } 

爲爲例如果liste_cle.length = 4個理論結果是:

01A ABCD

01B ABCD

01C ABCD

01D ABCD

但真正resulta是:

01a abcd只有

任何幫助將不勝感激。

回答

0

你的問題還不夠清楚。 Mapper需要(k1,v1)並生成(k2,v2)作爲每個輸入分割的輸出(對於textinpu格式,它是一條線)。所以mapper函數在每個輸入分割上運行並生成輸出鍵值對。 例:輸入到映射器:

這是一個例子

映射器取各行作爲輸入分割。映射器的輸入是(0,這是一個示例),其中key是偏移位置,值是完整行。然後根據您的地圖功能邏輯,它會生成輸出。所以你想要計算他的輸出數字, (This,1)(is,1)(an,1)(example,1)。

現在看到這個映射器已經用各種鍵值對產生了輸出。現在這叫做中間輸出。在將這些數據發送給還原器之前,先進行混洗。讓我知道這是否合理。

相關問題