cascading の謎

さらっとコードを読んだ感じだと、Output の Value にはTuple クラスのオブジェクトを渡しているようだ。
しかし、Tuple クラスはWritable インタフェースを実装していない・・・謎。

なんか cascading、謎が多いし、メリットよりデメリットのほうが多い気がする。
やはり素の Map/Red に回帰しようか・・・
にしても、TupleEntry のような仕組みは流用したいと思っていたのだが・・・内部構造がよく分からんので、同じようなライブラリを自作するか。

2012/4/13 追記

上記の謎が解けた。
Reducer#run、そこで使われている ReduceContext#nextKeyValue と読み進めていくと分かるのだが、Hadoopには Serialization、Serializer、Deserializer のクラスが存在する。
これらは、デフォでは WritableSerialization およびその内部クラスが使われるが、実は、"io.serializations" というproperty を設定することで自作のクラスを使わせることもできる。(org.apache.hadoop.io.serializer.SerializationFactory を読めば分かる。)

Cascadingでは、TupleSerialization などのクラスを自作しているのだ。
Map/ReduceでIOにWritableのサブクラスを使わなければならないというのは、実は WritableSerialization を使った場合の制約であり、Serialization クラスとして別なクラスを利用すれば、必ずしもこの限りではないのだ。