题目:
求每个通信商的上行、下行、总流量 (输出:通信商 上行 下行 总的)
思路:
通过手机号的前三位区分通信运营商
按照运营商分区后,在每个Reduce里计算各运营商总和即可
代码:
//分区比较器
package Partitioner02;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Partitioner;
public class MyPartitioner extends Partitioner<Text, RecordWritable> {
public int getPartition(Text text, RecordWritable recordWritable, int numPartitions) {
String st = recordWritable.getProduct();
if(st.equals("移动")){
return 0;
}
else if(st.equals("联通")){
return 1;
}
else if(st.equals("电信")){
return 2;
}
else {
return 3;
}
}
}
//实体类
package Partitioner02;
import org.apache.hadoop.io.Writable;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
public class RecordWritable implements Writable {
private String product;//运营商
private String phone;//手机号
private long upFlow;//上行流量
private long downFlow;//下行流量
private long sumFlow;//总流量
public void write(DataOutput dataOutput) throws IOException {
dataOutput.writeUTF(this.product