Hadoop 中使用 Hashmap 统计词频,会重复,求大神帮忙,在线等,挺急的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
louxinbo
V2EX    Java

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

  •  
  •   louxinbo 2018-08-23 09:57:34 +08:00 2805 次点击
    这是一个创建于 2613 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在写 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     Solana     1524 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:36 PVG 00:36 LAX 09:36 JFK 12:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86