Hadoop MapReduce:使用MapWritable作为密钥



我想将Map<String, String>从我的映射器传递到化简器。

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

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

但我想放弃这个黑客。

我知道如果未设置mapred.output.key.comparator,则使用的键类必须实现WritableComparable。问题是,MapWritable和SortedMapWritable缺少这个接口。

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

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

您可以扩展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;
    }
}

相关内容

  • 没有找到相关文章

最新更新