2016-05-18 131 views
-2

我想將我的Java代碼轉換爲Hadoop MapReduce。 我是MapReduce編程的新手,請幫助我解決這個問題。如何將Java代碼轉換爲mapreduce?

我想在我的文件中計數所有不同的值,並將輸出顯示在另一個文件中。

輸入: 亞歷 亞歷 約翰 斯圖爾特 邁克爾 約翰 邁克爾 亞歷

輸出: 亞歷克斯3

約翰2

斯圖爾特1

邁克爾2

這裏是我的代碼:

public class test { 

    public static void main(String[] args) throws Exception { 
     String[] arr = { "sa", "pa" , "ga", "sa", "pa", "la" }; 
     String[] result = new String[10]; 
     int counter = 0, count = 0; 
     for (int i = 0; i < arr.length; i++) { 
      boolean isDistinct = false; 
      for (int j = 0; j < i; j++) { 
       if (arr[i] == arr[j]) { 
        isDistinct = true; 
        break; 
       } 
      } 
      if (!isDistinct) { 
       result[counter++] = arr[i]; 
      } 
     } 
     for (int i = 0; i < counter; i++) { 
      count = 0; 
      for (int j = 0; j < arr.length; j++) { 
       if (result[i] == arr[j]) { 
        count++; 
       } 

      } 
      System.out.println(result[i] + " = " + count); 

     } 
    } 
} 

在這段代碼中我已經給定的輸入作爲一個數組,但在實際情況下,我需要獲取的是從HDFS文件。

該文件的輸出應該在HDFS中創建一個新文件。

+0

你應該找到一些研究的答案 – ZeusNet

回答

2

您的問題等同於大多數開發人員開始使用的標準WordCount MapReduce示例。

Example: WordCount v1.0

字計數是一個單一的MapReduce工作與Map和Reduce階段。

Mapper每次從輸入文件讀取每一行。它發出一個鍵值(在你的情況下的名稱)和1的計數。

基於鍵(名稱)的Reduce組合並加起來的值,最後發出一個鍵和總數已經看到了鑰匙的次數。

您會注意到該示例包含一個Combine階段,該階段(基本上)在Mapper的輸出上運行。在這個例子中,Reduce可以被重用,因爲邏輯是相同的,它接收和發出相同類型的鍵/值對象。組合器將減少發送到Reduce階段的數據量。