代写 Java MapReduce 在这次作业中,我们将进行电影数据集的处理:

在这次作业中,我们将进行电影数据集的处理:
https://raw.githubusercontent.com/sidooms/MovieTweetings/master/latest/ratings.dat (https://raw.githubusercontent.com/sidooms/MovieTweetings/master/latest/ratings.dat)
在数据集中,每一行包含了用户的电影评分(user1 对Titanic的打分为10). 这是数据集的格式:user_id::movie_id::rating::timestamp (用户id::电影id::打分::时间戳)
在这次作业中,对于每一对电影A和B,你需要找到所有的同是给电影A和B用户。比如,给出下面的数据集(为了便于说明,我们在示例中分别使用U和M表示用户和电影)。
U1::M1::2::11111111
U2::M2::3::11111111
U2::M3::1::11111111
U3::M1::4::11111111
U4::M2::5::11111111
U5::M2::3::11111111
U5::M1::1::11111111
U5::M3::3::11111111
假设用户名和电影名是string格式的,评分是整数格式的。你应该忽略mapper里的timestamp(时间戳)
你的输出格式应该如下所示:
(M1,M2) [(U5,1,3)]
(M2,M3) [(U5,3,3),(U2,3,1)]
(M1,M3) [(U5,1,3)]
其中(M,M)表示成对的电影,[ ]表示用户的list及其评分。比如,(U5,1,3)表示 U5对M1和M2的评分分别为1和3.
(请注意你的输出结果格式应该要和上面的输出示例一样)

提示:
在这次作业中,你可能需要实现不止Mapper/Reducer。你需要看看以下的MapReduce链接:https://stackoverflow.com/questions/38111700/chaining-of-mapreduce- jobs#answer-38113499 (https://stackoverflow.com/questions/38111700/chaining-of-mapreduce- jobs#answer-38113499)
你可能也需要self-join去寻找电影对,reduce-side join pattern可以帮助:https://www.edureka.co/blog/mapreduce-example-reduce-side-join/ (https://www.edureka.co/blog/mapreduce-example-reduce-side-join/)
如果Mapper的key和value不同于Reduce的key和value,你需要设置以下的配置:job.setMapOutputKeyClass(), job.setOutputKeyClass(), job.setMapOutputValueClass(), job.setapOutputValueClass()
不要使用Combiner(job.setCombiner())
如果Mapper/Reducer的value是一个复杂的object,你需要去实现Writerable Interface class
如果Mapper/Reducer的key是一个复杂的object,你也需要实现WritableComparable Interface
你可以使用ArrayWritable去存储Array values,但是你需要实现它的toString()函数以便能够将object可入文本文件。
请注意reducer中的迭代值(Iterable values)。当循环遍历迭代value list时,每个object instance(对象实例)在reducer中被循环使用。所以如果你讲他们添加到另一个list时,在流程结束时,新列表中的所有元素都将与您添加到列表中的最后一个对象相同。

提交截止时间:
2019/10/25 23:59

建立project:
获取并将hadoop dependency添加到你的project中:
• 在eclipse创建一个新的Java project
2.将这个dependency添加到你的项目中: https://github.com/mysilver/COMP9313/raw/master/Hadoop- Core.jar (https://github.com/mysilver/COMP9313/raw/master/Hadoop-Core.jar)
3.右键单击您的项目并将Hadoop-Core.jar文件添加到您的项目:Build-Path -> add External Archives
提交:
您的代码必须(全部)包含在文件AssigOne{zid}.java中。任何有编译错误的解决方案在整个作业中得到的分数都不会超过5分。
你需要在提交之前测试你的文件,以确保它可以在CSE机器的终端上编译/运行:
$ javac -cp “.:Hadoop-Core.jar” AssigOne{zid}.java
$ java -cp “.:Hadoop-Core.jar” AssigOne{zid} INPUT_PATH OUTPUT_PATH
登录任何CSE服务器(例如:williams或wagner),使用下面的give命令提交您的解决方案:
$ give cs9313 assig1 AssigOne{zid}.java
你必须用你自己的zid替换上面的{zid}。
您也可以使用WebCMS或Give: https://cgi.cse.unsw.edu.au/~ Give /Student/give.php (https://cgi.cse.unsw.edu.au/~ Give /Student/give.php)提交您的解决方案。
如果你不止一次提交作业,我们将只考虑最后的提交。如果您在提交代码时遇到任何问题,请发送电子邮件给课程管理员(Maisie Badami, m.badami@student.unsw.edu.au (mailto:m.badami@student.unsw.edu.au))

作业的评分办法如下:
• 输出由Hadoop MapReduce正确生成(7分)
• 2. 输出格式正确,如规范所述(2个标记)
格式必须与(M2,M3) [(U5,3,3),(U2,3,1)]相同,不应有如下空列表:(M2,M3) [ ]
3.自定义可写对象定义良好(例如,使用了适当的数据类型而没有浪费内存)
(4分)
4. 代码可以在CSE机器上执行,如作业规范所述(2分)
5. Mapper和Reducer的最大数量为2(2个映射器和2个还原器)(2分)
6. 文档和代码结构。在这里,您可以在程序开始时用一小段话(不超过300个单词)清楚地解释您的解决方案,并提供描述每个类正在做什么的注释。(3分)