Hadoop输出采集器

Hadoop输出采集器,hadoop,Hadoop,我有一个mapreduce程序,工作正常,下面是map和reduce函数的签名。outputcollector当前正在运行 output.collect(newtext, new IntWritable(someintegervalue like 5)); //works ok 我需要将其更改为处理/输出双值。(需要除以两个整数才能得到双精度的结果)。 我尝试如下更改outputcollector output.collect(newtext,newdoublewriteable(somedo

我有一个mapreduce程序,工作正常,下面是map和reduce函数的签名。outputcollector当前正在运行

output.collect(newtext, new IntWritable(someintegervalue like 5)); //works ok
我需要将其更改为处理/输出双值。(需要除以两个整数才能得到双精度的结果)。
我尝试如下更改outputcollector

output.collect(newtext,newdoublewriteable(somedoublevalue,如5.1))

编译/运行时出现问题。希望尽量减少映射中的更改并减少签名,因为程序运行良好,只需要获得双精度而不是整数的输出

以下是当前的地图减少签名和工作良好

class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> 

map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException

public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> 

public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
类映射扩展MapReduceBase实现映射器
映射(LongWritable键、文本值、OutputCollector输出、Reporter报告器)引发IOException
公共静态类Reduce扩展MapReduceBase实现Reducer
公共void reduce(文本键、迭代器值、OutputCollector输出、Reporter报告器)引发IOException{

根据您的评论,您似乎没有在所有地方更改签名。您需要将其更改为以下内容:

class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, DoubleWritable> 

map(LongWritable key, Text value, OutputCollector<Text, DoubleWritable> output, Reporter reporter) throws IOException

public static class Reduce extends MapReduceBase implements Reducer<Text, DoubleWritable, Text, DoubleWritable> 

public void reduce(Text key, Iterator<DoubleWritable> values, OutputCollector<Text, DoubleWritable> output, Reporter reporter) throws IOException {
类映射扩展MapReduceBase实现映射器
映射(LongWritable键、文本值、OutputCollector输出、Reporter报告器)引发IOException
公共静态类Reduce扩展MapReduceBase实现Reducer
公共void reduce(文本键、迭代器值、OutputCollector输出、Reporter报告器)引发IOException{

不要忘记,在配置作业时需要指定输出类,例如,需要编写:

conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(DoubleWritable.class);
否则它会这样抱怨:

"type mismatch value from map: expected org.apache.hadoop.io.IntWritable,
 recieved org.apache.hadoop.io.DoubleWritable"

“编译/运行有问题”-问题是什么?我尝试将outputcollector更改为以下输出。collect(newtext,new DoubleWritable(somedoublevalue,如5.1))它抱怨reducer签名不兼容。我需要以双精度而不是整数的形式获取输出(目前工作正常)。