V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
louxinbo
V2EX  ›  Java

Hadoop 中使用 Hashmap 统计词频,会重复,求大神帮忙,在线等,挺急的

  •  
  •   louxinbo · 2018-08-23 09:57:34 +08:00 · 2460 次点击
    这是一个创建于 2312 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在写 Hadoop 的一个作业,改写 wordcount 程序,要求统计每个词在不同文件中出现的次数。
    我的思路是,mapper 中每个词作为 key,每个词的文件名作为 value
    在 reducer 中,对 values 用 hashmap 统计文件名出现的次数。 最后遍历 hashmap。
    例如两个文件 a.txt ,b.txt
    a.txt
    apple banana apple
    b.txt
    banana
    对应 apple 这个 key,hashmap 应该的结果是{a.txt=2}
    对应 banana 这个 key,hashmap 应该的结果是{a.txt=1,b.txt=1}
    但是我得到的结果是{{a.txt=2}=1}
    {{a.txt=1}=1,{ b.xtx=1}=1}
    看起来好像是每一个 hashmap 都重复操作了一次
    我去找我们老师,老师也找不到 bug。只好上来问大神。
    6 条回复    2019-05-26 09:44:07 +08:00
    shaohan0228
        1
    shaohan0228  
       2018-08-23 10:05:54 +08:00
    wordcount 只照着基本例子超了一遍,key 文件名; value Map key 为单词,value 为词频,这样行么
    louxinbo
        2
    louxinbo  
    OP
       2018-08-23 10:13:45 +08:00
    @shaohan0228 谢谢回复。断句有点迷糊。能不能再解释下。谢了
    louxinbo
        3
    louxinbo  
    OP
       2018-08-23 10:22:12 +08:00
    我的 reducer 的代码,麻烦大家给看看,到底哪儿出错了。reduce 输入的 key 就是单词,输入的 values 就是文件名。
    public class IntSumReducer
    extends Reducer<Text,Text,Text,Text> {
    private Text result = new Text();

    public void reduce(Text key, Iterable<Text> values,
    Context context
    ) throws IOException, InterruptedException {
    Map<String,Integer> m = new HashMap<String,Integer>();
    int count;
    for (Text val : values) {
    if(m.get(val.toString())!=null) {
    count = m.get(val.toString())+1;
    }else {
    count = 1;
    }
    m.put(val.toString(), count);
    }
    result.set(m.toString());
    context.write(key, result);

    }
    }
    jieee
        4
    jieee  
       2018-08-23 11:09:52 +08:00   ❤️ 1
    词和文件名做 key
    louxinbo
        5
    louxinbo  
    OP
       2018-08-23 11:35:47 +08:00
    @jieee 谢谢。词和文件名做 key, 问题解决了。
    cangxiao
        6
    cangxiao  
       2019-05-26 09:44:07 +08:00
    我觉得这个 reduce 没有什么问题啊,为什么会出现{{a.txt=1}=1,{ b.xtx=1}=1}这种结果呢?楼主现在应该是知道了吧,跟我讲讲吧!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2217 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 01:49 · PVG 09:49 · LAX 17:49 · JFK 20:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.