2016-12-07 51 views
2

我有一個小項目,其中有一個帶有2個製表符分隔的文本列的文件。 我想讓我的映射器從文件中讀取它們,並將第二列設置爲鍵,將第一列設置爲reducer的值,但似乎無法完成。 然後,我想將(鍵,值)對傳遞給reducer,它將爲每個鍵爲其所有值創建一個列表。Mapreduce映射器傳遞鍵和值作爲文本字段

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

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

    public void map(Object key, Text value, Context context) 
         throws IOException, InterruptedException { 

     StringTokenizer itr = new StringTokenizer(value.toString(), "\t"); 
     while (itr.hasMoreTokens()) { 
      site.set(itr.nextToken()); 
      tag.set(itr.nextToken()); 
      context.write(tag, site); 
     } 
    } 
} 

我在conext.write行發生錯誤。 我該如何解決這個問題?

回答

3

您在context.write(tag, site);中寫入的值(網站)是Text對象,但您有Mapper<Object, Text, Text, IntWritable>。您應該將其更改爲Mapper<Object, Text, Text, Text>

現在你告訴它,你將輸出一個IntWritable作爲值。

您還可以刪除private final static IntWritable one = new IntWritable(1);,因爲它沒有被使用。

相關問題