实际中往往我们规定一种排序方法,并且为了避免数据倾斜情况,需要我们自定义分区。这里我们讨论将一个城市四年来的温度按年份升序排序,同一年份的温度按照降序排序。
自定义排序
定义一个封装对象
该对象需要实现WritableComparable接口。
public class MyClass implements WritableComparable<MyClass>{
private int year;
private int temperature;
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getTemperature() {
return temperature;
}
public void setHot(int temperature) {
this.temperature = temperature;
}
@Override
//反序列化过程
public void readFields(DataInput in) throws IOException {
this.year=in.readInt();
this.temperature=in.readInt();
}
@Override
//序列化过程
public void write(DataOutput out) throws IOException {
out.writeInt(year);
out.writeInt(temperature);
}
@Ove

本文详细介绍了在Hadoop中如何实现自定义排序和分区。自定义排序涉及定义一个实现WritableComparable接口的对象和继承WritableComparator的排序方法。自定义分区则需要继承Partitioner类,以满足特定的分组需求。主函数执行流程中,分区操作默认使用哈希取模,而分组则是基于排序后的记录进行,确保相同键值的记录在同一组内。
最低0.47元/天 解锁文章
475

被折叠的 条评论
为什么被折叠?



