public class MysortComparator extends WritableComparator
{
protected MysortComparator()
{
super(Text.class,true);
}
@SuppressWarnings("rawtypes")
public int compare(WritableComparable w,WritableComparable w1)
{
Text s=(Text)w;
Text s1=(Text)w1;
return -1 * s.compareTo(s1);
}
One simple way available. 不需要显式排序。 假设你有 one reducer 跑步。您可以覆盖 cleanup() 方法。 reducer中使用cleanup()方法在reduce任务结束时执行内部维护活动。 但你可以利用它。因为cleanup()方法只在reduce任务之后执行一次。 By the end of your reduce task you will be holding only last key-value pair. Now, instead of emiting that output from reduce() method emit it from cleanup() method. 只能将context.write()保存在cleanup()中。
@Override
protected void cleanup(Context context){
context.write(//keep your key-values here);
}
2条答案
按热度按时间pzfprimi1#
将“减速器数”设置为1。在map-side中,重写默认的排序方法以按降序排序,并在驱动程序代码中设置compartor类
job.setSortComparatorClass.
只从reduce调用中获取第一个键value。您还可以覆盖reducer的run方法,只读取第一条记录并将其传递给reduce调用,而忽略其他记录。如果您的单个reducer需要大的键/值对,那么这将避免开销。
af7jpaap2#
One simple way available.
不需要显式排序。假设你有
one reducer
跑步。您可以覆盖cleanup()
方法。reducer中使用cleanup()方法在reduce任务结束时执行内部维护活动。
但你可以利用它。因为cleanup()方法只在reduce任务之后执行一次。
By the end of your reduce task you will be holding only last key-value pair. Now, instead of emiting that output from reduce() method emit it from cleanup() method.
只能将context.write()保存在cleanup()中。我相信这样做你的工作毫不费力,你会得到所需的结果立即使用上述3行代码。