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