概要

seqdumperでシーケンスファイルの内容を表示させてみる。

@CretedDate 2012/08/05
@Env Java7, Mahout0.7

コマンドを叩いてみる

-iでファイルのPathを指定すると、シーケンスファイルの内容が標準出力される。

$ bin/mahout seqdumper -i temp/pairwiseSimilarity/part-r-00000

上記はrecommenditembasedを動作させた際にできた一時フォルダの中にいるシーケンスファイルを表示したコマンド。

実行結果は下記。

Running on hadoop, using /usr/bin/hadoop and HADOOP_CONF_DIR=
MAHOUT-JOB: /home/user/workspace/mahout-distribution-0.7/examples/target/mahout-examples-0.7-job.jar
12/08/05 13:11:08 INFO common.AbstractJob: Command line arguments: {--endPhase=[2147483647], --input=[temp/pairwiseSimilarity/part-r-00000], --startPhase=[0], --tempDir=[temp]}
Input Path: temp/pairwiseSimilarity/part-r-00000
Key class: class org.apache.hadoop.io.IntWritable Value Class: class org.apache.mahout.math.VectorWritable
Key: 101: Value: {104:0.6642652860670908,102:0.7308816827558576}
Key: 102: Value: {104:0.7706663050064644}
Key: 103: Value: {105:0.34926773656784976}
Key: 104: Value: {}
Key: 105: Value: {}
Count: 5
12/08/05 13:11:09 INFO driver.MahoutDriver: Program took 573 ms (Minutes: 0.00955)

KeyとValueのクラスと、各レコードの値が表示される。

ローカルのファイルに対して実行する

上記コマンドは通常HDFS上のファイルに対して実行される。

ローカルのファイルに対して行う場合は、URIでガチ指定してやるのが一番ミスしなさそうな気がする。

# さっきのファイルをローカルに落とす
$ hadoop fs -get temp/pairwiseSimilarity/part-r-00000 /tmp/part-r-00000

# ローカルのファイルに対してseqdumperを実行
$ bin/mahout seqdumper -i file:///tmp/part-r-00000

結果をファイル出力する

-oで出力ファイルを指定できる。

$ bin/mahout seqdumper -i temp/pairwiseSimilarity/part-r-00000 -o dump.txt
$ cat dump.txt

Input Path: temp/pairwiseSimilarity/part-r-00000
Key class: class org.apache.hadoop.io.IntWritable Value Class: class org.apache.mahout.math.VectorWritable
Key: 101: Value: {104:0.6642652860670908,102:0.7308816827558576}
Key: 102: Value: {104:0.7706663050064644}
Key: 103: Value: {105:0.34926773656784976}
Key: 104: Value: {}
Key: 105: Value: {}
Count: 5

件数だけ出力する

-cでレコードの件数だけ出力する。

$ bin/mahout seqdumper -c -i temp/pairwiseSimilarity/part-r-00000

Count: 5

出力件数を指定する

-nで出力する件数を指定できる。大きなデータの一部だけ表示したい場合に使う。

$ bin/mahout seqdumper -n 2 -i temp/pairwiseSimilarity/part-r-00000

Input Path: temp/pairwiseSimilarity/part-r-00000
Key class: class org.apache.hadoop.io.IntWritable Value Class: class org.apache.mahout.math.VectorWritable
Max Items to dump: 2
Key: 101: Value: {104:0.6642652860670908,102:0.7308816827558576}
Key: 102: Value: {104:0.7706663050064644}
Count: 2

Valueの最大出力文字数を指定

-b(--substring)で表示するValueの文字数の最大値を指定できる。

Valueに長い文章が入っている時に、前方50文字だけ出すとかそういう用途で使える。

下記は前方10文字のみ出力するよう指定。

$ bin/mahout seqdumper -b 10 -i temp/pairwiseSimilarity/part-r-00000

Input Path: temp/pairwiseSimilarity/part-r-00000
Key class: class org.apache.hadoop.io.IntWritable Value Class: class org.apache.mahout.math.VectorWritable
Key: 101: Value: {104:0.664
Key: 102: Value: {104:0.770
Key: 103: Value: {105:0.349
Key: 104: Value: {}
Key: 105: Value: {}
Count: 5

seqdumperの本体のコード

seqdumperの実態はmahout-utilsに入ってるorg.apache.mahout.utils.SequenceFileDumper

100行程度の小さなコード。内容も単純に読んだ中身を出力しているだけ。

ただ、ここで使われているSequenceFileIteratorというクラス(シーケンスファイルの中身をIteratorっぽく回せる。mahout-coreに入っている)は他でも使いそうな気がした。