2

これは、入力ファイルのサンプルです。

1,name1,name2 
2,name3,name4 
3,name5,name6

これが私のマップメソッドです:

public void map(LongWritable key, Text value, OutputCollector<Text, Text> output, Reporter reporter) throws IOException 
{
    String line = value.toString();
    StringTokenizer tk = new StringTokenizer( line, ",");       
    String keyValue = tk.nextToken();
    String s1Value = tk.nextToken();
    String s2Value = tk.nextToken();
    String valueString = s1Value+","+s2Value;
    output.collect( new Text(keyValue), new Text(valueString) );
}

これは私のreduce関数です:

public static class Reduce extends MapReduceBase implements Reducer<Text, Text, Text, Text> 
{
    public void reduce(Text key, Iterator<Text> values, 
        OutputCollector<Text, Text> output, Reporter reporter) throws IOException 
    {
        String item="";
        Text tmp= new Text();
        while ( values.hasNext() ) 
        {
            tmp = values.next();
        }
        item = tmp.toString();

        StringTokenizer tk = new StringTokenizer( item, ",");

        String s1="";
        String s2="";
        boolean entered = false;
        try
        {
            while ( tk.hasMoreTokens() && !entered )
            {   
                s1 = tk.nextToken();
                s2 = tk.nextToken();
                entered = true;
            }
        }
        catch (Exception e )
        {
            System.out.println("PROBLEM:"+item);
        }
        double result = compare(s1,s2);
        String result2 = s1+" & "+s2+"="+result;
        output.collect( key, new Text(result2) );
    }
}

だから私は出力が(例えば)であることを期待しています:

name1 & name2=1.0  

しかし、私が得るものは次のとおりです。

name1 & name2=1.0  &  =0.0

常に 2 つの空の文字列が比較されるように見えます!! 空の文字列が常に存在するのはなぜですか?

4

1 に答える 1

0

「compare(s1,s2)」のコードを気にする必要があります。比較機能のコードを貼り付けてください。

于 2012-10-08T12:50:09.710 に答える