因为一次写7道题,文章太长了,为了方便大家阅读,我分成了两篇。
接着上一篇文章,我们继续mapreduce编程之旅~~
1004: 题目
SingleTableJoin
描述
输入文件是一个包含有子女-父母表的文件。请编写一个程序,输入为此输入文件,输出是包含在子女-父母表中的孙子女-祖父母关系表。
输入
输入是包含有子女-父母表的一个文件
输出
输出是包含有孙子女-祖父母关系的一个文件,孙子女-祖父母关系是从子女-父母表中得出的。
样例输入
childparent
TomLucy
TomJack
JoneLucy
JoneJack
LucyMary
LucyBen
JackAlice
JackJesse
TerryAlice
TerryJesse
PhilipTerry
PhilipAlma
MarkTerry
MarkAlma
样例输出
grandchildgrandparent
JoneAlice
JoneJesse
TomAlice
TomJesse
JoneMary
JoneBen
TomMary
TomBen
MarkJesse
MarkAlice
PhilipJesse
PhilipAlice
1004:解题思路
单表的连接,这个比较有味道~~当然有可能是我水平有问题,所以写的比较复杂。
首先,我定义了一个自定义数据类型TextPair关于自定义数据类型我这里也不多说了,大家可以百度一下,或者看看hadoop权威指南上面都会讲解。
接着:我们从输入可以看出,孩子和双亲都写在同一个文件,而我们要求的是祖孙关系,所以双亲类也会出现在孩子列。为了正确区分,所以我们借助自定义数据类型来完成。
我先上代码,在代码中我会详细注释:
1005: 题目
Multi-tableJoin
描述
输入有两个文件,一个名为factory的输入文件包含描述工厂名和其对应地址ID的表,另一个名为address的输入文件包含描述地址名和其ID的表格。请编写一个程序输出工厂名和其对应地址的名字。
输入
输入有两个文件,第一个描述了工厂名和对应地址的ID,第二个输入文件描述了地址名和其ID。
输出
输出是一个包含工厂名和其对应地名的文件。
输入样例
input:
factory:
factorynameaddressID
BeijingRedStar1
ShenzhenThunder3
GuangzhouHonda2
BeijingRising1
GuangzhouDevelopmentBank2
Tencent3
BankofBeijing1
address:
addressIDaddressname
1Beijing
2Guangzhou
3Shenzhen
4Xian
输出样例
output:
factorynameaddressname
BankofBeijingBeijing
BeijingRedStarBeijing
BeijingRisingBeijing
GuangzhouDevelopmentBankGuangzhou
GuangzhouHondaGuangzhou
ShenzhenThunderShenzhen
TencentShenzhen
1005解题思路:
这题跟1004的思路都差不多,能做出1004,那么1005也就不在话下了。
我们已经使用1004的自定义数据类型TextPair,因为我们从一个文件中读入得数据分为两类,所以使用TextPair对其进行区分。
还是上代码吧,我在代码里详细注释:
1006: 题目
Sum
描述
输入文件是一组文本文件,每个输入文件中都包含很多行,每行都是一个数字字符串,代表了一个特别大的数字。需要注意的是这个数字的低位在字符串的开头,高位在字符串的结尾。请编写一个程序求包含在输入文件中的所有数字的和并输出。
输入
输入有很多文件组成,每个文件都有很多行,每行都由一个数字字符串代表一个数字。
输出
输出时一个文件,这个文件中第一行的第一个数字是行标,第二个数字式输入文件中所有数字的和。
输入样例
input:
file1:
1235546665312
112344569882
326434546462
21346546846
file2:
3654354655
3215456463
21235465463
321265465
65465463
32
file3:
31654
654564564
3541231564
351646846
3164646
3163
输出样例
output:
18685932816082
注意:
1只有一个输出文件;
2输出文件的第一行由行标"1"和所有数字的和组成;
3每个数字都是正整数或者零。每个数字都超过50位,所以常用数据类型是无法存储的;
4数字的低位在数字字符串的左侧,高位在数字字符串的右侧。比如样例输入第一个输入文件的第一行代表的数字是2135666455321。
1006解题思路:1006主要解决两个问题,一:大数加法。 二:将所有数据归一
第一个问题是常规解法,我不多说。 第二,因为我们最后需要求出一个总结果,所以就需要将所有的key归成一个group。当然我们可以自定义group的划分,这个可以参考hadoop权威指南,以后如果有需要,我会写出来的。我这里用了一个简单解决办法。(能用简单的办法,当然用简单的办法)
我结合代码给大家讲解吧:
1007: 题目
WordCountPlus
描述
WordCount例子输入文本文件并计算单词出现的次数。现在有一个WordCount2.0版本,在这个版本中你必须处理含有"/.',"{}[]:;"等等字符的输入文件。在你切词的时候,你应该把"declare,"切成"declare",同样"Hello!"应该切成"Hello","can't"应该切成"can't"。
输入
输入是包含很多单词的文本文件。
出入
输出是一个文本文件,这个文件的每一行包含一个单词和这个单词在所有输入文件中出现的次数。在输出文件中单词是按照字典顺序排序的。
输入样例
input1:
helloworld,byeworld.
input2:
hellohadoop,byehadoop!
输出样例
bye2
hadoop2
hello2
world2
1007解题思路:1007主要是对字符的过滤,这里我可以使用正则表达式来过滤。没什么难点~~
我们还是边看代码边说吧:
终于写完了,当然这里写的是我的解题思路,如果各位大大有更好的想法,不妨分享出来,大家一起happy。上面的程序都能正确提交。
当然我不排除我程序中有考虑不周的地方或错误的地方(测试数据的不全面造成)的,如果各位大大能指出,我将不胜感激~~
我最后再说明下,因为程序是我从网站上的提交库直接取回来的,格式不太好看。对不住各位了~~
分享到:
相关推荐
杭电OnlineJudge 200-2099的解题报告
ACM HDU 2000->2099 解题报告 ACM HDU 2000->2099 解题报告 ACM HDU 2000->2099 解题报告
hdoj杭电1000-2000部分解题报告 部分是cpp 格式 部分是文档格式
高岳-中等硬度解题报告.doc
2006陈启峰 - 消防站解题报告 poj 2152 fire
很有用的解题报告。。是acm初级提高的必备资料。。。。。
ACM题库,一些题目和答案,以及解题报告,传上来共享
华为云计算HCIE最新2.5面试题库
我去年暑假花了5天,把杭电ACM网站上2000到2099这100道题全AC了,又花了10来天精心写解题报告。 里面包括题目、解题思路、编程技巧以及参考源码。所有代码都是使用C/C++写的。 最近整理资料时无意间发现,打包...
五、实验报告 学号: 姓名: 班级:实验时间: 年 月 日 实验报告:用计算机解题——算法 一、请画出实验内容1"真假话问题"计算机求解算法的流程图。 ——————————————————————————————...
(2).定义一个变量max,采用三元运算将其中两个数字比较并将较大的数字赋予max (3).再分别定义一个mbx,mcx同样采用三元运算获得最小的数字和中间的数
21067010433-王珍-判断三角形-解题报告1
北大POJ1007-DNA Sorting 解题报告+AC代码
2023“钉耙编程”中国大学生算法设计超级联赛(4)-解题报告
北大POJ初级题-数据结构:解题报告+AC代码
大学英语四级CET-4翻译解题技巧.pdf
不错的资源 收集了网上的一些解题报告 方便同学们学习参考
HDU 1010-2500解题报告,ACMer可以借鉴一下
业余爱好。所以,算法不一定好,CODING也不一定佳,效率不一定高,只是能通过online judge而已。
ThinkPHP答题小程序源码-夺宝答题王(2.0),ThinkPHP答题小程序源码-夺宝答题王(2.0),ThinkPHP答题小程序源码-夺宝答题王(2.0),ThinkPHP答题小程序源码-夺宝答题王(2.0),