2016-12-07 10 views
2

2つのタブ区切りのテキスト列を持つファイルがある小さなプロジェクトがあります。 私のマッパーがファイルからそれらを読み込み、2番目の列をキーとして、最初の列を減速器の値として設定したいが、それをやり遂げることはできない。 次に、(キー、値)のペアを各キーのすべての値のリストを作成するレデューサーに渡したいと思います。キーと値の両方をテキストフィールドとして渡す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);は使用されていないため削除することもできます。

関連する問題