上記のコードには、コンパイルに必要なインポートステートメントなどが欠落しているため、ここでは、コマンドラインから動作してdictファイルの出力を読み取ってダンプする完全なバージョンです。
dumpdict.java:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
class DumpDict {
public static void main(String[] args) {
try {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
SequenceFile.Reader read = new SequenceFile.Reader(fs, new Path(args[0]), conf);
IntWritable dicKey = new IntWritable();
Text text = new Text();
// HashMap dictionaryMap = new HashMap();
while (read.next(text, dicKey)) {
// dictionaryMap.put(Integer.parseInt(dicKey.toString()), text.toString());
System.out.println(dicKey.toString()+" "+text.toString());
}
read.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
すべてのjarファイルがどこにあるかをJavaに明示的に伝える必要があることがわかりました。
export CLASSPATH=`find /path/to/mahout /usr/share/java -name '*.jar' | perl -ne 'chomp; push @jars, $_; END { print "\".:",(join ":",@jars),"\$CLASSPATH\"\n"; }'`
このようにコンパイルします。
javac dumpdict.java
このように実行します:
java -cp .:$CLASSPATH DumpDict {path to dict}
(これは、Javaを使用する人にとってはやり過ぎかもしれませんが、Javaをそれほど頻繁に使用しない人にとっては時間を節約できる可能性があります。)