700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > MapReduce案例----影评分析(年份 电影id 电影名字 平均评分)

MapReduce案例----影评分析(年份 电影id 电影名字 平均评分)

时间:2021-04-24 11:11:20

相关推荐

MapReduce案例----影评分析(年份 电影id 电影名字 平均评分)

题目:

1 现有如此三份数据:(这里只需用后两份) 2 1、users.dat 数据格式为: 2::M::56::16::70072 3 对应字段为:UserID BigInt, Gender String, Age Int, Occupation String, Zipcode String 4 对应字段中文解释:用户id,性别,年龄,职业,邮政编码 5 6 2、movies.dat 数据格式为:1::Toy Story (1995)::Animation|Childrens|Comedy ; 2::Jumanji (1995)::Adventure|Childrens|Fantasy ; 3::Grumpier Old Men (1995)::Comedy|Romance

7 对应字段为:MovieID BigInt, Title String, Genres String 8 对应字段中文解释:电影ID,电影名字,电影类型 9 10 3、ratings.dat 数据格式为: 1::1193::5::978300760 ; 1::661::3::978302109 ; 1::914::3::97830196811 对应字段为:UserID BigInt, MovieID BigInt, Rating Double, Timestamped String12 对应字段中文解释:用户ID,电影ID,评分,评分时间戳13 14 用户ID,电影ID,评分,评分时间戳,性别,年龄,职业,邮政编码,电影名字,电影类型15 userid, movieId, rate, ts, gender, age, occupation, zipcode, movieName, movieType16 需求:17关联两张表。18计算每部电影的平均评分,并按评分大小进行排序。评分一样,按照电影名排序。19(1):按照年份进行分组,要求结果展示形式:20 年份,电影id,电影名字,平均分。

思路:

首先从 ratings.dat 中计算出电影id,平均评分。得出一个中间表。

通过分析,中间表比 movis.dat 要小,所以优先考虑将中间表加载到内存中,写入到一个hashmap中,做 map join。

Map 端处理movies.dat 中的数据,根据电影 id 关联 hashmap,得到该电影的平均评分,并提取出电影的年份。

将年份,电影id,电影名字,平均评分封装到一个对象中,然后自定义排序规则。按照电影平均评分大小排序。

然后自定义分区,将相同年份的分到一个分区中。使得相同年份的数据出现在一个文件中。

求出平均评分代码:

1 package com.lhb.demo; 2 import org.apache.hadoop.conf.Configuration; 3 import org.apache.hadoop.fs.FileSystem; 4 import org.apache.hadoop.fs.Path; 5 import org.apache.hadoop.io.DoubleWritable; 6 import org.apache.hadoop.io.LongWritable; 7 import org.apache.hadoop.io.Text; 8 import org.apache.hadoop.mapreduce.Job; 9 import org.apache.hadoop.mapreduce.Mapper;10 import org.apache.hadoop.mapreduce.Reducer;11 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;12 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;13 import java.io.IOException;14 15 public class Test1AvgRate {16//map端17public static class Test1AvgRateMapper extends Mapper<LongWritable, Text, LongWritable, DoubleWritable> {18 protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {19 String[] split = value.toString().split("::");20 if (split.length >= 4) {21 context.write(new LongWritable(Long.valueOf(split[1])), new DoubleWritable(Double.valueOf(split[2])));22 }23 }24}25//reducer端26public

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。