Hadoop – setOutputValueClassはMapperの返り値を指定する

こんな風に書いていたら

conf.setOutputValueClass(Put.class);

こんな風に怒られた

java.lang.Exception: java.lang.NullPointerException
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:406)

場合によると思うんだがHadoopMapReduceで処理した値は最終的に、確かhbaseのPut型にして渡すようなきがするんだけど、MapReduce Tutorialを見るとPut型になっていない。てっきりReducerの最終的な戻り値の方を指定すると思ったらMapperの戻り値だったんだね。

JavaScript – クラスを書いてみる

他言語だとクラスって概念があって、newとかでインスタンスを作って処理したりできると思う。JavaScriptでも同じことはちゃんとできる。prototypeを使ってやる。

var personClass = function(name) {
this.name = name;
};
personClass.prototype = {
hello: function() {
console.log('私は' + this.name + 'です');
}
};
var red = new personClass('男性');
var blue = new personClass('女性');
red.hello();
blue.hello();

実行するとこんな感じ

$ node hoge.js
私は男性です
私は女性です

"こういう書き方がJSでもできるんだ!"っていうことだけ伝われば。そしてとてつもなく癖があるので、他サイトで一度prototypeを調べてみてくだされ。余談だけどJavaScriptのコードのテストはブラウザのconsoleを開いて直接書いて実行するか、nodeを使ってテストすると楽。nodeはbrew install nodeでできる。