2013-02-26 16 views
-1

我收到此错误: 的方法:在类型同时服用多种输入错误是发生

addInputPath(Job, Path, Class<? extends InputFormat>, Class<? extends Mapper>) 

MultipleInputs是 不适用于参数(JobConf, Path, Class<TextInputFormat>, Class<App.MapClass>)

为下面的代码:

MultipleInputs.addInputPath(job, in, TextInputFormat.class, MapClass.class); 
/* ------------------------ */ 

package hadoop.mi4; 

/** 
* Hello world! 
* 
*/ 
import java.io.IOException; 
import java.util.StringTokenizer; 

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapred.TextInputFormat; 
import org.apache.hadoop.mapreduce.Job; 
import org.apache.hadoop.mapreduce.Mapper; 
import org.apache.hadoop.mapreduce.Reducer; 
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
import org.apache.hadoop.mapreduce.lib.input.MultipleInputs; 
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 
import org.apache.hadoop.util.GenericOptionsParser; 


public class App { 

    public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{ 

     private final static IntWritable one = new IntWritable(1); 
     private Text word = new Text(); 

     public void map(Object key, Text value, Context context) throws IOException, InterruptedException { 
      StringTokenizer itr = new StringTokenizer(value.toString()); 
      while (itr.hasMoreTokens()) { 
       word.set(itr.nextToken()); 
       context.write(word, one); 
      } 
     } 
    } 

    public static class TokenizerMapper1 extends Mapper<Object, Text, Text, IntWritable>{ 

     private final static IntWritable one = new IntWritable(1); 
     private Text word = new Text(); 

     public void map(Object key, Text value, Context context) throws IOException, InterruptedException { 
      StringTokenizer itr = new StringTokenizer(value.toString()); 
      while (itr.hasMoreTokens()) { 
       word.set(itr.nextToken()); 
       context.write(word, one); 
      } 
     } 
    } 

    public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> { 
     private IntWritable result = new IntWritable(); 

     public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { 
      int sum = 0; 
      for (IntWritable val : values) { 
       sum += val.get(); 
      } 
      result.set(sum); 
      context.write(key, result); 
     } 
    } 

    public static void main(String[] args) throws Exception { 
     Configuration conf = new Configuration(); 
     String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); 
     if (otherArgs.length != 2) { 
      System.err.println("Usage: App <in> <out>"); 
      System.exit(2); 
     } 
     Job job = new Job(conf, "word count"); 
     job.setJarByClass(App.class); 
     job.setMapperClass(TokenizerMapper.class); 
     job.setCombinerClass(IntSumReducer.class); 
     job.setReducerClass(IntSumReducer.class); 
     job.setOutputKeyClass(Text.class); 
     job.setOutputValueClass(IntWritable.class); 
     //FileInputFormat.addInputPath(job, new Path(otherArgs[0])); 
     MultipleInputs.addInputPath(job, new Path(otherArgs[0]), TextInputFormat.class, TokenizerMapper.class); 
     MultipleInputs.addInputPath(job, new Path(otherArgs[1]), TextInputFormat.class, TokenizerMapper1.class); 
     FileOutputFormat.setOutputPath(job, new Path(otherArgs[2])); 
     System.exit(job.waitForCompletion(true) ? 0 : 1); 
    } 
} 
+0

,什么是你的问题更换以下进口

import org.apache.hadoop.mapred.TextInputFormat 

? – Veger 2013-02-26 12:08:31

+1

我们怎么知道什么是'工作,在'向我们展示您的代码 – asifsid88 2013-02-26 12:10:43

+0

MultipleInputs.addInputPath我得到错误 – unknown 2013-02-27 11:14:42

回答

1

它不起作用,因为您已将mapredmapreduce的类混淆。与

import org.apache.hadoop.mapreduce.lib.input.TextInputFormat 
+0

现在导入成为错误。 是否有任何额外的东西需要添加到POM.XML文件执行多个文件 – unknown 2013-02-27 12:43:20

+0

对不起,我的导入有误。你现在可以尝试。 – 2013-02-27 12:55:18

+0

thnx它现在有效 – unknown 2013-02-28 04:41:27

0

看起来你的job变量的类型是JobConf而它应该是一个Job。你应该尝试

MultipleInputs.addInputPath(new Job(job), in, TextInputFormat.class, MapClass.class); 

你还应该检查MapClass扩展Mapper

+0

MultipleInputs.addInputPath(新的工作(工作),in,TextInputFormat.class,MapClass.class); 现在我已经将它写入了你的格式,它现在给出了另一个错误: - MultipleInputs类型的方法addInputPath(Job,Path,Class <?extends InputFormat>,Class <?extends Mapper>)是 不适用于参数(Job,Path,Class ,Class ) – unknown 2013-02-27 07:56:21

+0

@ujjwalkotdiya好的,我更新了我的答案。你可以显示“MapClass”代码吗?它是否扩展'Mapper'? – 2013-02-27 08:03:22

+0

它不扩展映射器,但实现它。 映射器与wordcount相同。 整个例子与wordcount相同,但我只是从两个文件中输入 – unknown 2013-02-27 09:26:07

相关问题