今天面试被虐。。。好久没写MapRedue 忘记了。额额。。。
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.net.URI; import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.math3.stat.descriptive.SummaryStatistics; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; /** * * * File Name: PageVisitAge_Avg.java * * General Description: Copyright and file header. * * Revision History: * Modification * Author Date(MM/DD/YYYY) JiraID Description of Changes * --------------------- ------------ ---------- ----------------------------- * @author Bill Zhang 2017年9月6日 * */ public class PageVisitAge_Avg extends Configured implements Tool{ static class PageVisitMapper extends Mapper<LongWritable,Text,Text,Text>{ @Override protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, Text>.Context context) throws IOException, InterruptedException { String line = value.toString(); String url = line.split(",")[1]; context.write(new Text(url), value); } } static class PageVisitReducer extends Reducer<Text, Text, Text, Text>{ private ConcurrentHashMap<String, String> dictTable = new ConcurrentHashMap<String, String>(); @Override protected void setup(Reducer<Text, Text, Text, Text>.Context context) throws IOException, InterruptedException { URI[] path_arr = context.getCacheFiles(); if (path_arr.length == 0) { throw new FileNotFoundException("Distributed cache file not found."); } URI dict_uri = path_arr[0]; FileSystem fs = FileSystem.get(context.getConfiguration()); FSDataInputStream in = fs.open(new Path(dict_uri)); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String user_dict = null; while ((user_dict = br.readLine()) != null) { String[] records = user_dict.split(","); //加载字典表 dictTable.put(records[0], user_dict); } } @Override protected void reduce(Text arg0, Iterable<Text> arg1, Reducer<Text, Text, Text, Text>.Context context) throws IOException, InterruptedException { SummaryStatistics statistics = new SummaryStatistics (); //计算访问访问page的平均年龄 for(Text value : arg1){ String id = value.toString().split(",")[0]; String userInfo = dictTable.get(id); String age = userInfo.split(",")[2]; statistics.addValue(Double.valueOf(age)); System.out.println(value); } double avg = statistics.getMean(); context.write(arg0, new Text(avg+"")); } } @Override public int run(String[] args) throws Exception { Configuration conf =getConf(); conf.set("mapreduce.input.fileinputformat.input.dir.recursive", "true"); Job job = Job.getInstance(conf,PageVisitAge_Avg.class.getSimpleName()); job.setJarByClass(getClass()); /** * 用户访问的网页历史 * 例如: * 1,http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html * 2,http://docs.oracle.com/javase/8/ * 3,http://docs.oracle.com/javase/8/docs/api/index.html */ FileInputFormat.addInputPath(job,new Path(args[0])); /** * 用户字典 * 例如: * 1,zhangsan,20,male * 2,zhangsi,23,female * 3,susan,30,male * */ job.addCacheFile(new URI(args[1])); FileOutputFormat.setOutputPath(job,new Path(args[2])); job.setMapOutputKeyClass(Text.class); job.setOutputFormatClass(TextOutputFormat.class); job.setMapperClass(PageVisitMapper.class); job.setReducerClass(PageVisitReducer.class); job.setNumReduceTasks(10); return job.waitForCompletion(true)?0:1; } /** * * @param args * @throws Exception */ public static void main(String [] args ) throws Exception{ int ec = ToolRunner.run(new Configuration(), new PageVisitAge_Avg(), args); System.exit(ec); } }
相关推荐
### Google、Baidu、Tencent 面试题总结——海量数据处理方法 #### Bloom Filter **适用范围**:Bloom Filter是一种空间效率极高的概率型数据结构,主要用于判断一个元素是否在一个集合中。它适用于数据字典的实现...
【tencent.doc】可能是面试题目的详细文档,可能包含编程题、算法题、系统设计题、产品分析题、项目管理题以及公司文化、业务理解等相关问题。编程题可能涉及到C++、Java、Python等语言的基础与高级用法,算法题则...
【标题】"2019最新BAT python面试题"揭示了这个压缩包文件的主要内容,即一份关于2019年百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent)这三大中国互联网巨头对Python编程语言的面试题目集合。这些企业通常对...
在IT行业中,面试是每个求职者必经的关卡,特别是对于希望进入知名大厂,如百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent,简称BAT)的求职者来说,准备充分的面试题至关重要。这份"2021最新BAT大厂面试题合集...
以下是对2019年BAT大数据面试题的一些关键知识点的详细解析,这些知识点主要与Java编程语言相关: 1. **Java基础**:面试通常从Java的基础知识开始,如类、对象、封装、继承、多态等面向对象特性。面试官可能会询问...
以下是对2018年最新BAT面试题中涉及的前端、Java和Python知识点的详细解析: **前端部分** 前端开发是构建Web应用的重要组成部分,主要关注用户交互和视觉呈现。2018年的面试题可能包括以下知识点: 1. **...
腾讯面试题总结 本资源摘要信息涵盖了腾讯面试的一些重要知识点,涵盖了前端开发、JavaScript、Web 安全、性能优化、状态管理等方面的内容。 一、前端开发 1. Web 安全:CSRF 是什么?如何防范? 2. 前端性能优化...
【BAT经典面试题】是IT行业内,特别是中国互联网巨头百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent)在招聘过程中常采用的一系列面试问题。这些问题涵盖多个技术领域,旨在评估候选人的综合能力。以下是一些...
这份名为"tencent腾讯笔试题汇总"的压缩包文件显然集合了多套腾讯公司的历年笔试题目,涵盖了最近两年各地的试题,这对于准备应聘腾讯职位的求职者来说是一份宝贵的参考资料。 腾讯笔试通常包括但不限于编程能力、...
【标签解析】:“AT”标签可能是指阿里巴巴(Alibaba)和腾讯(Tencent)这两家公司在互联网行业的影响力,也可能代表面试题中重点关注的公司或技术方向。 【压缩包子文件的文件名称列表】:“vuehr”可能是压缩包...
【描述】:“BAT面试题”通常指的是中国互联网巨头百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent)在招聘过程中常问的技术和非技术类面试问题。这些公司是中国乃至全球互联网行业的领头羊,因此他们的面试标准...
15. 数字游戏:这个问题是经典的逻辑推理题,两个数分别为3和7,因为A通过和得知不是14,B通过积得知不是21,然后A通过排除法知道是3和7,B也立即明白。 大题解析: 1. 字符串转小写:`toLower`函数需要检查源字符...
这份"2020最新BAT面试题.zip"压缩包中,显然包含了针对大型互联网公司如百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent,合称BAT)面试的热门技术点。以下将详细解析这些关键知识点: 1. 微服务:微服务架构是...
在IT行业的求职过程中,尤其是针对顶级的互联网公司如阿里巴巴(Alibaba)、腾讯(Tencent)、百度(Baidu)、360、网易(NetEase),以及国际巨头如谷歌(Google)和微软(Microsoft),笔试和面试环节是至关重要的...
这些公司的笔试和面试题通常涵盖了广泛的计算机科学和技术知识,旨在评估候选人的专业技能和解决问题的能力。以下是对"百度腾讯阿里笔试面试题汇总"这个资源中可能包含的知识点的详细说明: 1. **算法与数据结构**...
这份"2020最新BAT java经典必考面试题.pdf"涵盖了Java语言的基础到高级,包括但不限于语法、数据结构、算法、多线程、并发编程、JVM内存模型、设计模式等关键领域。 1. **Java基础**:面试通常从基础开始,包括变量...
在IT行业中,尤其是对于互联网巨头如百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent,合称BAT)来说,面试题目往往涵盖了广泛的领域,包括但不限于编程语言、操作系统、数据结构、算法、网络、数据库以及软件...
本压缩包“2023最新BAT java经典必考面试题.zip”包含了最新的面试题目,可以帮助求职者准备面试。 面试题目可能涵盖以下几个关键领域: 1. **基础知识**: - Java语法:包括类、对象、接口、继承、多态等基础...
“com.tencent.ig.zip”这一文件名揭示了它与腾讯(Tencent)公司的一款名为“IG”的产品有关。在IT行业中,IG常常指的是Interactive Game,即互动游戏,通常指的是在线游戏或者移动游戏。腾讯作为全球知名的游戏...
leetcode面试-腾讯专题做题记录 LeetCode腾讯专题地址, 小目标 每天至少一道算法题 每天更新README学习markdown写法(不会真的有人不会markdown吧,不会吧,不会吧) 先这样,有什么想到的再说 1月20日 正式开始,...