我想将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;
}
}