2013-02-26 18 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

相關問題