【发布时间】:2012-07-25 06:27:15
【问题描述】:
我是 hadoop mapreduce 的新手。我想开发 mapreduce 代码以将文件文本转换为小写。但是与文件中前面的序列一样。这意味着文件的实际顺序而不是类似于 wordcount 数据序列。所以任何人都可以给我一个想法吗?
【问题讨论】:
标签: hadoop mapreduce hadoop-streaming
我是 hadoop mapreduce 的新手。我想开发 mapreduce 代码以将文件文本转换为小写。但是与文件中前面的序列一样。这意味着文件的实际顺序而不是类似于 wordcount 数据序列。所以任何人都可以给我一个想法吗?
【问题讨论】:
标签: hadoop mapreduce hadoop-streaming
只需逐行读取文件,然后将其作为键值发出>,因此每一行的大写都会成为reducer的值(一个带有只有一个元素)。
现在您所要做的就是将值(每个键的单行)作为 reducer 的 key 发出,您可以将 reducer value 设为 NullWritable。
映射器中的LineNumber 以 1 为增量开始,每行输入一次。 还要重写 isSplitable() 以返回 false 以便使一个文件完全由一个映射器处理。
【讨论】:
我在通过 hadoop map reduce 程序将给定文本转换为大写时遇到了同样的问题。
下面是我的reducer代码sn-p
public static class UpperCaseReducer extends MapReduceBase implements Reducer<Text,Text,Text,Text>
{
public void reduce(Text key,Iterator<Text> value,OutputCollector<Text, Text> output,Reporter rporter) throws IOException
{
//while(value.hasNext())
{
String NULL= new String();
//System.out.println(value.toString());
output.collect(value.next(),new Text(""));
}
}
}
在我的映射器代码中,我只是逐行读取输入文本,将其转换为大写,并将原始行作为键传递,并将转换后的文本作为映射器方法中的值作为输出。
【讨论】: