使用 MapReduce 统计 HBase 成绩表中单科最高单科排名和总分排名的完整代码

使用 MapReduce 统计 HBase 成绩表中单科最高单科排名和总分排名的完整代码如下:

```java import java.io.IOException; import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil; import org.apache.hadoop.hbase.mapreduce.TableMapper; import org.apache.hadoop.hbase.mapreduce.TableReducer; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job;

public class HBaseRankCalculator { static class HBaseMapper extends TableMapper<Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text();

public void map(ImmutableBytesWritable row, Result value, Context context)
    throws IOException, InterruptedException {
  Stringval = new String(value.getValue(Bytes.toBytes("grade"), Bytes.toBytes("math")));
  word.set(val);
  context.write(word, one);
}

}

static class HBaseReducer extends TableReducer<Text, IntWritable, ImmutableBytesWritable> { public void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } Put put = new Put(Bytes.toBytes(key.toString())); put.addColumn(Bytes.toBytes("rank"), Bytes.toBytes("math_rank"), Bytes.toBytes(sum)); context.write(null, put); } }

public static void main(String[] args) throws Exception { Configuration conf = HBaseConfiguration.create(); Job job = Job.getInstance(conf, "HBase Rank Calculator"); job.setJarByClass(HBaseRankCalculator.class);

Scan scan =new Scan();
scan.addColumn(Bytes.toBytes("grade"), Bytes.toBytes("math"));

TableMapReduceUtil.initTableMapperJob("scores", scan, HBaseMapper.class, Text.class, IntWritable.class, job);
TableMapReduceUtil.initTableReducerJob("r
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值