这几天忙着找实习,所以日志耽搁了,现在来补起~~。

相信很多人都知道  PKU Online Judge, 现在中国人民大学也提供了一个类似的平台,但与北京在线评判系统不一样的是,中国人民大学的这个系统是专门评判mapreduce编程题的。

我把链接发出来,大家可以去试着做看看: http://cloudcomputing.ruc.edu.cn/index.jsp

大家在做题前,先看看“常见问题”根据系统要求的格式来写程序。不然不能正常运行。(我就是直接运行错了3次。 - -!)

可以看到这个平台的题目还不多,现在只有1000-1009,其中1008-1009的题目还没发出来。所以我们讨论1000-1007.

如果你想先自己测试下,下面的文章就可以先不忙看。等你解决其中的题,可以再来看这篇文章,大家可以共同提高。

1000 比较简单,用hadoop自带的例子都可以解决,我这里就不多说了。

1001 题目:

a+b per line

描述

有时候你会遇到这样的问题:你有一个表格,给出了每个人在十二月,一月和二月的收入。表格如下:
name  Dec   Jan($)
CM    200   314
LY    2000  332
QQM   6000  333
ZYM   5000  333
BP    30    12

你需要知道每个人这三个月的收入总和,那么你就需要将表格中一行代表收入的数字相加.下面请编写程序解决这个问题。

输入

输入只包含一个文件,文件中有一个表格,它的结构如下:
1 200   314
2 2000  332
3 6000  333
4 5000  333
5 30    12   
其中每行最前面的数字是行标

输出

输出是一个文本文件,每一行第一个数字式行标,第二个数字是输入文件中每一行除行标外数字的和。如下:
1 514
2 2332
3 6333
4 5333
5 42

输入样例

input:
1 200   314
2 2000  332
3 6000  333
4 6000  333
5 5000  333
6 30    12

输出样例:

1 514
2 2332
3 6333
4 6333
5 5333
6 42

注意:
1 输入文件和输出文件都只有一个;
2 输入和输出文件每行的第一个数字都是行标;
3 每个数据都是正整数或者零.。

1001 解题思路:

1001的题目其实是很简单的,将读入的每一行用空格分隔,第一个域就是行号作为key、再将第二个域和第三个域相加作为value.

因为map阶段会根据key值自动排序,我们就不用操心了。至于key的排序顺序,我们以后讨论。

现在上代码:

[java] view plaincopy
  1. public class MyMapre {
  2. public static  class wordcountMapper extends
  3. Mapper{
  4. public void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException{
  5. Integer sum = 0;
  6. String line = value.toString();
  7. StringTokenizer itr = new StringTokenizer(line);//分割
  8. if (itr.hasMoreElements())
  9. key = new LongWritable(Integer.parseInt(itr.nextToken()));  //获取第一个域的值
  10. while(itr.hasMoreElements()){
  11. sum += Integer.parseInt(itr.nextToken()); //求和剩下的值
  12. }
  13. context.write(key, new IntWritable(sum));
  14. }
  15. }
  16. public static  void main(String args[])throws Exception{
  17. Configuration conf = new Configuration();
  18. Job job = new Job(conf, "MyMapre");
  19. job.setJarByClass(MyMapre.class);
  20. job.setMapOutputKeyClass(LongWritable.class);
  21. job.setMapOutputValueClass(IntWritable.class);
  22. job.setOutputKeyClass(LongWritable.class);
  23. job.setOutputValueClass(IntWritable.class);
  24. job.setMapperClass(wordcountMapper.class);
  25. FileInputFormat.setInputPaths(job, new Path(args[0]));
  26. FileOutputFormat.setOutputPath(job, new Path(args[1]));
  27. job.waitForCompletion(true);
  28. }
  29. }

1002 题目:

Sort

描述

你的程序需要读入输入数据文件,然后再将数据按升序排序后输出。在输入文件中,每一行都代表一个数据。

输入

输入是一组文本文件,在文本文件中每一行都是一个元数据,而且每个数据是用一个数字串代表待排序的数字。

输出

输出文件中每一行第一个数字是行标,后面一个数字是排好序的原始输入数据,注意排序顺序是从小到大升序排序。

输入样例

input1:

2
32
654
32
15
756
65223

input2:

5956
22
650
92

input3:

26
54
6

输出样例:
1 2
2 6
3 15
4 22
5 26
6 32
7 32
8 54
9 92
10 650
11 654
12 756
13 5956
14 65223
1002 解题思路:

在上一题已经说过在map阶段会对key自动排序, 所以我们读入一行后(元数据),将其作为key,传递给reduce。我们可以看到最后输出的样例,还需要打印出行号。所以我们在reduce外面定义一个int 来记录总的行数(作为key输出)。而将map阶段传来的key作为reduce阶段的value输出。

上代码吧:

[java] view plaincopy
  1. public class MyMapre {
  2. public static  class wordcountMapper extends
  3. Mapper{
  4. public void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException{
  5. String one = value.toString();
  6. context.write(new LongWritable(Integer.parseInt(one)) , key);
  7. }
  8. }
  9. public static  class wordcountReduce extends
  10. Reducer{
  11. int sum = 0;
  12. public void reduce(LongWritable key, Iterablevalues, Context context)throws IOException, InterruptedException{
  13. sum++;
  14. context.write(new LongWritable(sum), key);
  15. }
  16. }
  17. public static  void main(String args[])throws Exception{
  18. Configuration conf = new Configuration();
  19. Job job = new Job(conf, "Sort");
  20. job.setJarByClass(MyMapre.class);
  21. job.setOutputKeyClass(LongWritable.class);
  22. job.setOutputValueClass(LongWritable.class);
  23. job.setMapOutputKeyClass(LongWritable.class);
  24. job.setMapOutputValueClass(LongWritable.class);
  25. job.setMapperClass(wordcountMapper.class);
  26. job.setReducerClass(wordcountReduce.class);
  27. FileInputFormat.setInputPaths(job, new Path(args[0]));
  28. FileOutputFormat.setOutputPath(job, new Path(args[1]));
  29. job.waitForCompletion(true);
  30. }
  31. }

1003 题目:

Data deduplication

描述

你的程序要求读入输入文件,在去掉所有数据中的重复数据后输出结果。在输入文件中每一行是一个元数据。

输入

输入是一组文本文件,在每个输入文件中每一行是一个数据。每一个元数据都是一个字符串。

输出文件

输出文件的每一行都是在输入文件中出现过的一个数据,并且输出文件中的每一行都不相同。

输入样例

input1:
2006-6-9 a
2006-6-10 b
2006-6-11 c
2006-6-12 d
2006-6-13 a
2006-6-14 b
2006-6-15 c
2006-6-11 c
input2:
2006-6-9 b
2006-6-10 a
2006-6-11 b
2006-6-12 d
2006-6-13 a
2006-6-14 c
2006-6-15 d
2006-6-11 c

输出样例:
2006-6-10 a 
2006-6-10 b 
2006-6-11 b 
2006-6-11 c 
2006-6-12 d 
2006-6-13 a 
2006-6-14 b 
2006-6-14 c 
2006-6-15 c 
2006-6-15 d 
2006-6-9 a 
2006-6-9 b

注意:
1 输出结果是按照字典顺序排序的;
2 每一行都是一个元数据;
3 重复数据在输出文件中也要输出一次。
1003 解题思路:

首先还是将一行进行划分,将第一个域作为map阶段的key输出。第二个域作为map阶段的value输出。

reduce收到key-value对后,key相同时,会返回多个value。根据题意要求,value中出现的字母不能重复,所以我们要消掉重复的字母、而且最后需要排序,我们可以调用java自带的排序函数来实现。

上代码了:

[java] view plaincopy
  1. public class MyMapre {
  2. public static  class wordcountMapper extends
  3. Mapper{
  4. public void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException{
  5. String line = value.toString();
  6. Text word = new Text();
  7. Text one = new Text();
  8. StringTokenizer itr = new StringTokenizer(line);//划分
  9. if (itr.hasMoreElements()) word.set(itr.nextToken());
  10. if (itr.hasMoreElements()) one.set(itr.nextToken());
  11. //获取两个域的值
  12. context.write(word, one);
  13. }
  14. }
  15. public static  class wordcountReduce extends
  16. Reducer{
  17. public void reduce(Text key, Iterablevalues, Context context)throws IOException, InterruptedException{
  18. String pre = ""; //消除重复字母的变量
  19. List list = new ArrayList(); //进行排序前存储的list
  20. for (Text str : values){
  21. if (!str.toString().equals(pre)) {  //如果不相等者更新pre变量
  22. pre = str.toString();
  23. list.add(pre);  //向list中添加不重复的元素
  24. }
  25. }
  26. Collections.sort(list);  //排序
  27. for (int i = 0; i < list.size(); i++)
  28. context.write(key, new Text(list.get(i)));  //一次性输出
  29. }
  30. }
  31. public static  void main(String args[])throws Exception{
  32. Configuration conf = new Configuration();
  33. Job job = new Job(conf, "deduplication");
  34. job.setJarByClass(MyMapre.class);
  35. job.setOutputKeyClass(Text.class);
  36. job.setOutputValueClass(Text.class);
  37. job.setMapOutputKeyClass(Text.class);
  38. job.setMapOutputValueClass(Text.class);
  39. job.setMapperClass(wordcountMapper.class);
  40. job.setReducerClass(wordcountReduce.class);
  41. FileInputFormat.setInputPaths(job, new Path(args[0]));
  42. FileOutputFormat.setOutputPath(job, new Path(args[1]));
  43. job.waitForCompletion(true);
  44. }

人民大学云计算编程的网上评估平台--解题报告 1001-1003相关推荐

  1. 人民大学云计算编程的网上评估平台--解题报告 1004-1007

    因为一次写7道题,文章太长了,为了方便大家阅读,我分成了两篇. 接着上一篇文章,我们继续mapreduce编程之旅~~ 1004: 题目 Single Table Join 描述 输入文件是一个包含有 ...

  2. java版农业银行_农行网上支付平台_商户接口编程指南-java_edition-v103.pdf

    农行网上支付平台_商户接口编程指南-java_edition-v103 Java Edition V1.0.3 –– 2003/ 11/26 V0.1 2003/ 12/ 10 V0.2 2003-1 ...

  3. java收款编程_农行网上支付平台-商户接口编程指南-Java_Edition-V3.1.6.pdf

    [实例简介] [实例截图] 目录 1. 简介.............................................................................. ...

  4. 农行app怎么开消息服务器,农行网上支付平台-交易市场接口编程指南.doc

    农行网上支付平台-交易市场接口编程指南 中国农业银行网上支付平台 交易市场 PHP商户接口编程指南 Java Edition V1.0 修订历史纪录 日期版本说明作者2009/11/18V1.0初稿童 ...

  5. java 网银支付收款接口_农行网上支付平台-商户接口编程指南-Java_Edition-V3.0.2.pdf...

    农行网上支付平台-商户接口编程指南-Java_Edition-V3.0.2 中国农业银行网上支付平台 商户接口编程指南 Java Edition V3.0.2 农行网上支付平台 商户接口编程指南 –J ...

  6. 中国网上人民大学计算机在线考试,中国人民大学网络教育易考通客户端在线考试须知...

    人气 3560 详情 最后更新时间:2020-12-24 电话:010-82500808 邮箱:zhaosheng@cmr.com.cn 网站: 地址:北京市海淀区清华东路甲7号 各位同学: 大家好! ...

  7. asp毕业设计——基于asp+access的校园网上购物平台设计与实现(毕业论文+程序源码)——网上购物平台

    基于asp+access的校园网上购物平台设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的校园网上购物平台设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. ...

  8. 2019人民大学信息学院夏令营经验贴

    0.引言 人大的夏令营整体感受十分良好,写这份经验贴的目的是记录这份难得经历和给之后的小伙伴们一份可以参考的经验贴,就像我参考前辈的一样,传承下去 :D 关键时间点: 发布通知:5月6日 举办时间:7 ...

  9. 人民大学与加拿大女王大学金融硕士——你终究会成为你想成为的人

    人生,正如在大海中航行.先设定好方向,朝着终点靠拢.我们每个人都有自己想成为的那个人.人生没有标准的答案,不一定非要长成玫瑰,如果你愿意,做茉莉.做雏菊.做向日葵,做千千万万,做你自己.人生有了方向, ...

最新文章

  1. mac通过tree源码编译安装tree
  2. linux下的daemon进程
  3. 【中国剩余定理】POJ 1006 HDU 1370 Biorhythms
  4. Oracle 原理: 初步认识程序包
  5. navmenu 收起没有动画 element_ABC360等3家英语动画片课程测评:用动画片学英语不靠谱?...
  6. STM32系列单片机向量表和向量表重新定位
  7. Python Flask Web 第三课 —— 模板
  8. ROS 日志消息(C++)
  9. k8s上部署java应用(activiti)实践
  10. 彻底删除文件(File Delete Absolutely) 最新3.01版本 也已经在中关村在线升级成功
  11. 20191102每日一句
  12. 发现一个有意思的英文期刊 China and the World Ancient and Modern Silk Road
  13. html怎样在标签中显示图片,HTML-图片标签学习
  14. 教你如何下载微软补丁
  15. Easypoi 报表模板设置
  16. IT计算机实习:JAVA实习报告范文(二)
  17. 广州坐标系转换大地2000_就是这样操作!从地方坐标系到2000国家大地坐标系的转换...
  18. 网站中网页最优色彩搭配方案学习--Java免费学习网
  19. 天龙八部谁是主角?(MR词频统计)
  20. 思古解析js静态逆向分析

热门文章

  1. 【Android 逆向】substrate 框架 ( substrate 简介 | substrate 相关文档资料 )
  2. 【Android 插件化】Hook 插件化框架 ( 从源码角度分析加载资源流程 | Hook 点选择 | 资源冲突解决方案 )
  3. 【Android 安全】DEX 加密 ( Application 替换 | 创建用户自定义 Application | 替换 ContextImpl 对象的 mOuterContext 成员 )
  4. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
  5. selenium-webdriver(python) (十六) --unittest 框架
  6. cf D. Powerful array 莫队算法
  7. RabbitMQ 3.6 安装
  8. [Java]jdbc[转]
  9. Hibernate 关联 set 和 list 对比
  10. SQL Server 2005:你应该知道的13件事情