2016-01-22 36 views
0

我已经写了下面的代码,它不会比较是否阻塞它继续进入else块。 请仔细阅读并检查是否有任何差异。hadoop mapreduce编程条件如果条件

请帮上

public class ReduceIncurance extends Reducer<Text, Text, Text, IntWritable> { 
    public void reduce(Text key, Iterable<Text> values, Context context) 
      throws IOException, InterruptedException 

    { 

     int sum = 0; 
     int count = 0; 
     String[] input = values.toString().split(","); 

     for (String val : input) { 
      System.out.println("first:" + val); 
      if (val.equalsIgnoreCase("Residential")) { 
       System.out.println(val); 
       count++; 
       sum += count; 
      } else { 
       System.out.println("into elsee part"); 
       count++; 
       sum += count; 
      } 

      context.write(key, new IntWritable(sum)); 
     } 

    } 

} 
+0

现在还不清楚你在问什么。有什么问题? – khuderm

+1

这是一个可能的重复http://stackoverflow.com/questions/34958593/how-to-iterate-among-text-in-the-for-loop-and-find-count-of-a-particular-text -in?answertab = active#tab-top –

+0

你期望的输出是什么。您的问题不清楚 –

回答

1

试试这个

public void reduce(Text key, Iterable<Text> values , Context context) throws IOException, InterruptedException 
{ 
    int count=0; 

    for (Text val : values) 
    { 
     if (val.toString().equalsIgnoreCase("Residential")) 
     { 
      count ++; 
     } 
     else 
     { 
      System.out.println("into elsee part"); 
     } 
    } 
    context.write(key, new IntWritable(count)); 
} 

这会给你每个键下的值 '住宅' 计数。

问题在于此代码String[] input = values.toString().split(",");Iterable<Text>不能转换为String[]像这样。

+1

您无法对文本执行.get() –

0

对于需要遍历值的特定键。你不需要将它们存储到String []。

试试这个

public class ReduceIncurance extends Reducer<Text, Text, Text, IntWritable> { 
public void reduce(Text key, Iterable<Text> values, Context context) 
     throws IOException, InterruptedException 
{ 

    int sum = 0; 
    int count = 0; 
    for (Text val : values) { 
     String[] input = val.toString().split(","); 
     for (int i = 0; i < input.length; i++) { 
     if (input[i].equalsIgnoreCase("Residential")) { 
      System.out.println(val); 
      count++; 
      sum += count; 
     } else { 
      System.out.println("into elsee part"); 
      count++; 
      sum += count; 
     } 
     } 
    context.write(key, new IntWritable(sum)); 
    } 
} 
} 

我仍然不明白为什么要增加总和,如果和别的块都算中。