如何将Java代码转换为mapreduce?

问题描述:

我想将我的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

您的问题等同于大多数开发人员开始使用的标准WordCount MapReduce示例。

Example: WordCount v1.0

字计数是一个单一的MapReduce工作与Map和Reduce阶段。

Mapper每次从输入文件读取每一行。它发出一个键值(在你的情况下的名称)和1的计数。

基于键(名称)的Reduce组合并加起来的值,最后发出一个键和总数已经看到了钥匙的次数。

您会注意到该示例包含一个Combine阶段,该阶段(基本上)在Mapper的输出上运行。在这个例子中,Reduce可以被重用,因为逻辑是相同的,它接收和发出相同类型的键/值对象。组合器将减少发送到Reduce阶段的数据量。