0

いくつかのデータのバイグラムに関する統計を収集するための簡単なプログラムを作成しました。統計をカスタムファイルに出力します。

Path file = new Path(context.getConfiguration().get("mapred.output.dir") + "/bigram.txt");
FSDataOutputStream out = file.getFileSystem(context.getConfiguration()).create(file);

私のコードには次の行があります:

Text.writeString(out, "total number of unique bigrams: " + uniqBigramCount + "\n");
Text.writeString(out, "total number of bigrams: " + totalBigramCount + "\n");
Text.writeString(out, "number of bigrams that appear only once: " + onceBigramCount + "\n");

私はvim/geditで次の出力を取得します:

'total number of unique bigrams: 424462
!total number of bigrams: 1578220
0number of bigrams that appear only once: 296139

行頭の不要な文字とは別に、印刷されない文字もいくつかあります。この背後にある理由は何でしょうか?

4

1 に答える 1

1

@ThomasJungblutが言うように、writeStringメソッドは、writeStringの呼び出しごとに2つの値(文字列の長さ(vintとして)とStringバイト)を書き出します。

/** Write a UTF8 encoded string to out
 */
public static int writeString(DataOutput out, String s) throws IOException {
  ByteBuffer bytes = encode(s);
  int length = bytes.limit();
  WritableUtils.writeVInt(out, length);
  out.write(bytes.array(), 0, length);
  return length;
}

このファイルにテキスト出力を印刷できるようにしたい場合(つまり、すべて人間が読める形式)、out変数を。でラップしPrintStream、printlnまたはprintfメソッドを使用することをお勧めします。

PrintStream ps = new PrintStream(out);
ps.printf("total number of unique bigrams: %d\n", uniqBigramCount);
ps.printf("total number of bigrams: %d\n", totalBigramCount);
ps.printf("number of bigrams that appear only once: %d\n", onceBigramCount);
ps.close();
于 2012-07-25T10:35:15.293 に答える