0

我想将一个Map<String, String>从我的映射器传递给减速器。

所以我想要的元组是:<(Sorted)MapWritable,IntWritable>

目前,这被穷人的序列化所躲避:我Text使用 Guava -s MapJoiner 和 MapSplitter 类创建了一个简单的对象,它们生成String的然后可用于初始化Text要写入的对象。所以我在一个字符串中传输键值对,然后将其拆分回来。

但我想放弃这个黑客。

我知道如果mapred.output.key.comparator没有设置,那么使用的密钥类必须实现WritableComparable。问题是,MapWritable 和 SortedMapWritable 缺少这个接口。

我检查了WritableComparable接口,但我有点困惑,因为你必须重新发明读写方法(序列化),而不仅仅是compareTo().

所以我的问题是:你能帮我找到一个有效的例子、代码、指南或任何有价值的信息吗?提前致谢。

4

1 回答 1

1

您可以扩展MapWritable(或SortedMapWritable)并实现WritableComparable. 您不需要重写读写方法,因为MapWritable(或SortedMapWritable)已经为您完成了。例如,

public class MyMapWritable extends MapWritable implements
        WritableComparable<MyMapWritable> {

    @Override
    public int compareTo(MyMapWritable o) {
        // Implement your compare logic
        return 0;
    }
}

public class MySortedWritable extends SortedMapWritable implements
        WritableComparable<MySortedWritable> {

    @Override
    public int compareTo(MySortedWritable o) {
        // Implement your compare logic
        return 0;
    }
}
于 2013-09-05T10:51:50.473 回答