我试图在一个原始比较器中实现以下内容,但不确定如何编写这个?
这里的图姆斯坦普是一个很好写的地方。
if (this.getNaturalKey().compareTo(o.getNaturalKey()) != 0) {
return this.getNaturalKey().compareTo(o.getNaturalKey());
} else if (this.timeStamp != o.timeStamp) {
return timeStamp.compareTo(o.timeStamp);
} else {
return 0;
}
我在这里找到了一个提示,但不确定如何实现对longwriteabel类型的处理?http://my.safaribooksonline.com/book/databases/hadoop/9780596521974/serialization/id3548156
谢谢你的帮助
4条答案
按热度按时间zpjtge221#
您是否在询问比较hadoop提供的longwritable类型的方法?如果是,那么答案是使用
compare()
方法。有关详细信息,请向下滚动此处。zdwk9cvp2#
正确实现rawcomparator的最佳方法是扩展writableComarator和重写
compare()
方法。writeablecomparator编写得非常好,因此您可以很容易地理解它。owfi6suc3#
从我在
LongWritable
班级:字节比较是
RawComparator
.px9o7tmv4#
假设我有一个compositekey,它表示一对(string stocksymbol,long timestamp)。我们可以对stocksymbol字段进行一次主要的分组传递,以获得一种类型的所有数据,然后在shuffle阶段,我们的“二次排序”使用timestamp long成员对timeseries点进行排序,以便它们以分区和排序的顺序到达reducer。
现在,compositekey比较器将是: