海风_LzWXL 发表于 2017-10-23 22:41 val转换为字符串,然后在判断length也可以 if(val .toString.length() > 0){ joinStr=joinStr+","+val // 计数 count++; |
本帖最后由 sstutu 于 2017-10-24 12:47 编辑 海风_LzWXL 发表于 2017-10-23 22:41 使用空或则null,可以找找里面判断为空的函数 |
sstutu 发表于 2017-10-23 21:38 val是Text类型的Text类型中没有length方法 啊。 |
本帖最后由 sstutu 于 2017-10-23 21:48 编辑 public static class AnagramReduce extends Reducer<Text, Text, Text, Text>{ public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException { // 值 StringBuilder value = new StringBuilder(); // 计数 int count = 0; // 拼接单词 for(Text val : values){ // 分割符, if(value.length() > 0){ value.append(","); } value.append(val); // 计数 count++; } // 因为我们要统计相同字母组成的单词,所以相同字母组成的单词个数大于等于2才会输出 if(count > 1){ context.write(key, new Text(value.toString())); } } } 上面不应该使用value,所以拼接失败了。 ###################### 改成下面内容 // 拼接单词 val joinStr=null; // 计数 int count = 0; for(Text val : values){ // 分割符, if(val .length() > 0){ joinStr=joinStr+","+val // 计数 count++; // 因为我们要统计相同字母组成的单词,所以相同字母组成的单词个数大于等于2才会输出 } } if(count > 1){ context.write(key, new Text(joinStr.toString())); } 你的count是全局的,拼接应该也是全局的 |