电影案例[求平均分,评分最高的N条记录,.每部电影的点击次数(求热门)]
3.3.2.2.每部电影的平均分
/**
求每部电影的平均分
@author DOIT_HANG_GE
@version 2019年2月26日
*/
public class MovieAvgRate {
public static class MovieMapper extends Mapper<LongWritable, Text, Text, MovieBean>{
@Override
protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, MovieBean>.Context context)
throws IOException, InterruptedException {
String str = value.toString();
Gson gs = new Gson();
MovieBean movieBean = gs.fromJson(str, MovieBean.class);
context.write(new Text(movieBean.getMovie()), movieBean);
}
}
public static class MovieReducer extends Reducer<Text, MovieBean, Text, DoubleWritable>{
@Override
protected void reduce(Text key, Iterable iters,
Reducer<Text, MovieBean, Text, DoubleWritable>.Context context) throws IOException, InterruptedException {
double sum = 0 ;
int count = 0 ;
for (MovieBean movieBean : iters) {
count++ ;
sum+=Double.parseDouble(movieBean.getRate());
}
double avgRate = sum/count ;
context.write(key, new DoubleWritable(avgRate));
}
}
public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setMapperClass(MovieMapper.class);job.setReducerClass(MovieReducer.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(MovieBean.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(DoubleWritable.class);FileInputFormat.setInputPaths(job, new Path("D:\\data\\movie\\input"));FileOutputFormat.setOutputPath(job, new Path("D:\\data\\movie\\output1"));job.setNumReduceTasks(1);boolean re = job.waitForCompletion(true);System.exit(re?1:0);
}
}
3.3.2.3.每部电影评分最高的N条记录
/**每部电影评分最高的n部电影
@author DOIT_HANG_GE
@version 2019年2月26日
*/
public class MovieRateTopN {
public static class MovieTopMapper extends Mapper<LongWritable, Text, Text, MovieBean> {
Gson gs = new Gson();
Text k = new Text();
@Override
protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, MovieBean>.Context context)
throws IOException, InterruptedException {
String str = value.toString();
MovieBean movieBean = gs.fromJson(str, MovieBean.class);
k.set(movieBean.getMovie());
context.write(k, movieBean);
}
}public static class MovieTopReducer extends Reducer<Text, MovieBean, NullWritable, MovieBean> {
@Override
protected void reduce(Text key, Iterable iters,
Reducer<Text, MovieBean, NullWritable, MovieBean>.Context contex)
throws IOException, InterruptedException {
ArrayList beans = new ArrayList();
for (MovieBean movieBean : iters) {
beans.add(movieBean);
}
Collections.sort(beans, new Comparator() {
@Override
public int compare(MovieBean o1, MovieBean o2) {
// TODO Auto-generated method stub
return o1.getRate().compareTo(o2.getRate());
}
});
if (beans.size() > 2) {
for (int i = 0; i < 3; i++) {
contex.write(NullWritable.get(), beans.get(i));
}
}
}
}public static void main(String[] args) throws Exception, IOException {
Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setMapperClass(MovieTopMapper.class);job.setReducerClass(MovieTopReducer.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(MovieBean.class);job.setOutputKeyClass(NullWritable.class);job.setOutputValueClass(MovieBean.class);FileInputFormat.setInputPaths(job, new Path("D:\\data\\movie\\input"));FileOutputFormat.setOutputPath(job, new Path("D:\\data\\movie\\output2"));job.setNumReduceTasks(1);boolean re = job.waitForCompletion(true);System.exit(re ? 1 : 0);
}
}
3.3.2.4**.每部电影的点击次数(求热门)**
/**
统计电影的点击次数 按照电影的点击次数倒叙排列输出topN
@author DOIT_HANG_GE
@version 2019年2月26日
*/
public class GlobCountTopN {
public static class GlobCountMapper extends Mapper<LongWritable, Text, Text, MovieBean> {
Gson gs = new Gson();
Text k = new Text();@Overrideprotected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, MovieBean>.Context context)throws IOException, InterruptedException {String str = value.toString();MovieBean v = gs.fromJson(str, MovieBean.class);k.set(v.getMovie());// 以电影的id为key输出 电影bean为valuecontext.write(k, v);}
}
public static class GlobCountReducer extends Reducer<Text, MovieBean, Text, IntWritable> {
HashMap<String, Integer> map = new HashMap<>();
@Override
protected void reduce(Text key, Iterable iters,
Reducer<Text, MovieBean, Text, IntWritable>.Context context) throws IOException, InterruptedException {
int count = 0;
for (MovieBean movieBean : iters) {
count++;
}
// 将电影id和电影点击的次数存储在hashmap中
map.put(key.toString(), count);
}
// 在指定完reduce方法后最终都会执行cleanup方法
@Override
protected void cleanup(Reducer<Text, MovieBean, Text, IntWritable>.Context context)
throws IOException, InterruptedException {
// 对map进行排序
Set<Entry<String, Integer>> entrySet = map.entrySet();
ArrayList<Entry<String, Integer>> list = new ArrayList<>(entrySet);
Collections.sort(list, new Comparator<Entry<String, Integer>>() {
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
// TODO Auto-generated method stub
return o2.getValue() - o1.getValue();
}
});
for (int i = 0; i < Math.min(10, list.size()); i++) {
context.write(new Text(list.get(i).getKey()), new IntWritable(list.get(i).getValue()));
}}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setMapperClass(GlobCountMapper.class);job.setReducerClass(GlobCountReducer.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(MovieBean.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.setInputPaths(job, new Path("d:/data/movie/input"));FileOutputFormat.setOutputPath(job, new Path("d:/data/movie/output"));//全局统计 统计的结果只能输出到一个文件中job.setNumReduceTasks(1);boolean res = job.waitForCompletion(true);System.exit(res ? 0 : -1);
}
}
电影案例[求平均分,评分最高的N条记录,.每部电影的点击次数(求热门)]相关推荐
- DayDayUp:2019春节电影《疯狂的外星人》和《新喜剧之王》两部电影观后感
DayDayUp:2019春节电影<疯狂的外星人>和<新喜剧之王>两部电影观后感 目录 <疯狂的外星人> <新喜剧之王> 今天早上看的<疯狂的外星 ...
- oracle数据库中求某行的上一条记录和下一条记录
利用oracle提供的lead.lag 函数来查询已有记录的上一条.下一条记录. 求id=ae2e829ecffd4715a5c163f829c2e0f5的上一条记录和下一条记录 上一条记录的sql ...
- 分析1.6万部电影,找出了华语电影烂片王
文章讲的是分析1.6万部电影,找出了华语电影烂片王,某天,工作量不饱和(嘘),就在公司上网随便搜了部电影来看,本来还期待着看完能够为搬砖提供灵感,然鹅--事实证明,我想多了. 在把进度条拖了 11 次 ...
- 人一生必看的100部电影(全球最佳电影排名榜TOP250)
人一生必看的100部电影(全球最佳电影排名榜TOP250) 人的一生能看多少部电影?假设我们每周都看一部,从10岁看到80岁将会看3640部.但是我们也不可能喜欢这全部的电影.大多数的可能,我们会根据 ...
- 大数据告诉你哪部电影最有影响力
史上哪部电影最有影响力? 是票房大热的漫威英雄,还是号称影响了一代人的<星球大战>,或者是具有浪漫主义色彩的黑帮史诗<教父>? 其实都不是. " 历史上最具影响力的电 ...
- python平均分由高到低顺序排列输出选手编号和最后得分_python 字典的使用案例二:求平均分,并按平均分由高到低输出选手编号和最后得分...
校园好声音大赛,三位选手得分,由8位评委给出. 请根据评分表,将每们选手的得分去掉一个最高分和一个最低分后求平均分,并按照平均分由高到低输出选手编号和最后得分. dicScores = {'012': ...
- 全局变量求平均分最高分最低分_打分函数trimmean,去掉最高最低分求平均分,用它就对了...
在各种赛事评分时,为了公平起见,一般情况下,都需要去掉一个最高分和一个最低分,再来求平均分,这时候,如果用平时熟悉的求和sum函数和最大max最小min函数组合,当然也是能够求得出来的.但是会感觉没那 ...
- Excel忽略0值求平均分,将某一列分类后求平均值
AVERAGE函数计算平均数 函数功能 AVERAGE函数用于计算所有参数的算术平均值. 函数语法 AVERAGE(number1,number2-) 参数说明 Number1,number2,-:表 ...
- python爬虫实战——猫眼电影案例
python爬虫实战--猫眼电影案例 ·背景 笔者上一篇文章<基于猫眼票房数据的可视化分析>中爬取了猫眼实时票房数据,用于展示近三年电影票房概况.由于数据中缺少导演/演员/编剧阵容等信 ...
最新文章
- 【FFmpeg】ffmpeg命令详解(三)高级选项
- 小米 Play 发布:CPU+GPU 双 Turbo,每个月送 10 GB 流量
- 12864输出字符c语言,大家看看该怎么改才能让12864液晶显示屏显示21个字符啊?...
- 用户 'XXX\SERVERNAME$' 登录失败。 原因: 找不到与提供的名称匹配的登录名。 [客户端: ]...
- laravel artisan
- java-判断相同和对象比较大小
- jsp+easyui+DataGrid 例子
- Eclipse快捷键一览
- 阶梯式的岗位技术培训认证体系
- 商业智能数据营销该怎么做?
- 中国水冷氙气试验箱行业市场供需与战略研究报告
- Table(name=“xx“)与Entity(name=“xx“) 问题
- rest服务理解以及restful api
- Solidity教程:初学Solidity
- Android飞机大战游戏报告,基于android的飞机大战游戏设计与开发.doc
- 中国脑计划颠覆性创新之路四,用脑科学预测互联网的未来发展趋势
- 1.8.9适用的java,Java 7、8、9+版本的一些新特性
- JAVA操作共享文件夹文件、下载、读取(windows、Linux通用)
- SimpleMind Pro 1.29.1 小巧的思维导图工具
- springboot 使用 Spring Boot WebSocket 创建聊天室 2-11
热门文章
- spice-gtk-0.35源代码解析之spicy解析
- 【leetcode】剑指 Offer 29. 顺时针打印矩阵(shun-shi-zhen-da-yin-ju-zhen-lcof)(模拟)[简单]
- Qtum量子链周报(10月22日-10月28日)
- 上游模式用于实验室用冷冻机压力和真空度的高精度控制
- 2015阿里校园招聘笔试题(8.29 测试开发工程师)
- 上海迪士尼“疯狂动物城”主题园区启动主要施工
- 你想要的资源我都有(2)
- SAP中外币评估(FAGL_FC_VAL)时账期未开导致的问题处理实例
- JVM_01 内存结构(深入理解+图解)
- Character code tableGB2312