mapreduce字谜作业相关问题

查看数: 6885 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-10-23 20:36

正文摘要:

    要求:将下面的单词中用相同字母组成的单词找出。                     下图是原始数据:         ...

回复

langke93 发表于 2017-10-24 18:09:58
海风_LzWXL 发表于 2017-10-23 22:41
val是Text类型的Text类型中没有length方法 啊。

val转换为字符串,然后在判断length也可以
   if(val .toString.length() > 0){
                                    joinStr=joinStr+","+val
                                       // 计数
                                count++;

sstutu 发表于 2017-10-24 09:41:10
本帖最后由 sstutu 于 2017-10-24 12:47 编辑
海风_LzWXL 发表于 2017-10-23 22:41
val是Text类型的Text类型中没有length方法 啊。

使用空或则null,可以找找里面判断为空的函数
海风_LzWXL 发表于 2017-10-23 22:41:01
sstutu 发表于 2017-10-23 21:38
public static class AnagramReduce extends Reducer{
                public void reduce(Text key, Ite ...

val是Text类型的Text类型中没有length方法 啊。
sstutu 发表于 2017-10-23 21:38:51
本帖最后由 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是全局的,拼接应该也是全局的





关闭

推荐上一条 /2 下一条