如何将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中创建一个新文件。
答
您的问题等同于大多数开发人员开始使用的标准WordCount MapReduce示例。
字计数是一个单一的MapReduce工作与Map和Reduce阶段。
Mapper每次从输入文件读取每一行。它发出一个键值(在你的情况下的名称)和1的计数。
基于键(名称)的Reduce组合并加起来的值,最后发出一个键和总数已经看到了钥匙的次数。
您会注意到该示例包含一个Combine阶段,该阶段(基本上)在Mapper的输出上运行。在这个例子中,Reduce可以被重用,因为逻辑是相同的,它接收和发出相同类型的键/值对象。组合器将减少发送到Reduce阶段的数据量。
你应该找到一些研究的答案 – ZeusNet