0

Hadoop のマッパーの出力値としてオブジェクト (ツリーなど) を渡すことはできますか? そうですか、どうですか?

4

1 に答える 1

3

Tariqのリンクを拡張し、ツリーマップの1つの可能な実装を簡単に詳しく説明するには<Text, IntWritable>

public class TreeMapWritable extends TreeMap<Text, IntWritable> 
                             implements Writable {

    @Override
    public void write(DataOutput out) throws IOException {
        // write out the number of entries
        out.writeInt(size());
        // output each entry pair
        for (Map.Entry<Text, IntWritable> entry : entrySet()) {
            entry.getKey().write(out);
            entry.getValue().write(out);
        }
    }

    @Override
    public void readFields(DataInput in) throws IOException {
        // clear current contents - hadoop re-uses objects
        // between calls to your map / reduce methods
        clear();

        // read how many items to expect
        int count = in.readInt();
        // deserialize a key and value pair, insert into map
        while (count-- > 0) {
            Text key = new Text();
            key.readFields(in);

            IntWritable value = new IntWritable();
            value.readFields(in);

            put(key, value);
        }
    }
}

基本的に、Hadoopのデフォルトのシリアル化ファクトリは、オブジェクト出力がWritableインターフェース(上記で詳述したreadFieldsおよびwriteメソッド)を実装することを期待しています。このようにして、ほとんどすべてのクラスを拡張して、シリアル化メソッドを後付けすることができます。

org.apache.hadoop.io.serializer.JavaSerializationもう1つのオプションは、構成プロパティを構成してJavaシリアル化(デフォルトのJavaシリアル化メソッドを使用)を有効にすることですio.serializationsが、これはお勧めしません。

于 2012-12-19T23:30:51.623 に答える