mahout Sparse Vectors FromSequence Files 자세히 (7)

1499 단어
이제 DF 생성
calculateDF
호출 방법은 TFIDFConverter입니다.calculateDF
입력 디렉터리는 tf-vectors 디렉터리입니다. 이전 단계에서 생성된 키입니다. 키는 문서 디렉터리이고value는 주파수 vector입니다.
진정한 실행 방법은 startDFCounting이고 또 하나의hadoop 프로그램이다. 마퍼는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 더하기, 마지막은 토탈count도 1 더하기 totalcount는 총 문서 수입니다.
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 형식으로 쓴 것이다. 아마도 성능 때문일 것이다.

좋은 웹페이지 즐겨찾기