2013-04-12 [長年日記]
■MultipleInputsとFileInputFormat
Hadoopで複数の入力ファイルに別々のMapperを使いたくなりました。
org.apache.hadoop.mapreduce.lib.input.MultipleInputs
を使うことになります。
FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileInputFormat.addInputPath(job, new Path(otherArgs[1]));
と書いてあったソースを、
MultipleInputs.addInputPath(job, new Path(otherArgs[0]), FileInputFormat.class, FooMap.class); MultipleInputs.addInputPath(job, new Path(otherArgs[1]), FileInputFormat.class, BarMap.class);
としました。
ところが、
Exception in thread "main" java.lang.RuntimeException: java.lang.InstantiationException
が出てしまいます。
?? となりましたが、当たり前でした。FileInputFormat
は(なぜか)abstractなclassだったのです。
MultipleInputs.addInputPath(job, new Path(otherArgs[0]), TextInputFormat.class, FooMap.class); MultipleInputs.addInputPath(job, new Path(otherArgs[1]), TextInputFormat.class, BarMap.class);
で動きました。
FileInputFormat.addInputPath
で追加したパスはTextInputFormat
で読みこまれている(らしい)のですが、それはどこに書いてあるんだろう?
……という疑問を残したままフェイドアウト。