mahout SparseVectorsFromSequenceFiles详解(7)

现在进入倒数第二步,DF的生成

calculateDF

调用方法是TFIDFConverter.calculateDF

输入目录是tf-vectors目录,上一个步骤生成的,key是文档目录,value是词频vector

真正的执行方法是startDFCounting,又是一个hadoop程序,mapper是TermDocumentCountMapper,reducer是TermDocumentCountReducer

先看TermDocumentCountMapper

  @Override
  protected void map(WritableComparable<?> key, VectorWritable value, Context context)
    throws IOException, InterruptedException {
    Vector vector = value.get();
    Iterator<Vector.Element> it = vector.iterateNonZero();

    while (it.hasNext()) {
      Vector.Element e = it.next();
      context.write(new IntWritable(e.index()), ONE);
    }
    context.write(TOTAL_COUNT, ONE);
  }

key是词的index,value是词频vector

有index的就加1,最后是total_count也加1,可以理解total_count是文档总数

再看TermDocumentCountReducer

  @Override
  protected void reduce(IntWritable key, Iterable<LongWritable> values, Context context)
    throws IOException, InterruptedException {
    long sum = 0;
    for (LongWritable value : values) {
      sum += value.get();
    }
    context.write(key, new LongWritable(sum));
  }

就是把文档对应index为1的都加起来,这样可以知道每个index有多少个文档有这个词存在

最后生成的目录在df-count

createDictionaryChunks

这个挺无聊的,就是把df-count的内容写成chunks sequence file的形式,估计是为了性能原因吧


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值