前言
==============================================================================
大数据时代越来越多的数据,我们怎么才能从大量数据中提取有价值的数据呢,同时这么多的数据我们该如何编写有效快速的程序进行获取
一、流程介绍
==================================================================================
原始数据集如下
第一章的教学只涉及到数据的清洗和获取,所以只有Map,没有Reduce(统计的时候才需要),大致过程如图
二、创建Maven工程项目
=========================================================================================
(1)创建Maven
打开IDAD,新建一个项目,选择Maven,点击下一步
添加项目名称,点击完成
创建之后,右下角会弹出提示,选择Auto自动导入依赖
(2)添加依赖
编辑pom.xml配置文件,添加如下内容,等待自动导入完成
<!-- Hadoop相关依赖包-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 打包编译的插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>6</source>
<target>6</target>
</configuration>
</plugin>
</plugins>
</build>
一个基本的Hadoop的Maven工程项目就创建完毕了
三、编写MapReduce程序
===========================================================================================
(1)Map类
map类的作用是对原始数据的清洗操作,解析JSON格式的数据,获取我们所需要的数据
在java目录下新建一个DataCleanMap类,继承Mapper类,复写map方法
public class DataCleanMap extends Mapper<LongWritable, Text, Text, Text> {
@Override
protected void map(LongWritable k1, Text v1, Context context)
throws IOException, InterruptedException {
}
}
在map方法里,解析JSON数据,读取数据
String line = v1.toString();//获取每一行内容
JSONObject jsonObj = new JSONObject(line); //将字符串转换为JSON格式
String id = jsonObj.getString(“uid”); //获取主播的id数据
/**
- 获取主播的其他数据
- gold-------->>金币
- watchnumpv–>>播放量
- follower---->>粉丝
- length------>>开播时长
*/
int gold = jsonObj.getInt(“gold”);
int watchnumpv = jsonObj.getInt(“watchnumpv”);
int follower = jsonObj.getInt(“follower”);
int length = jsonObj.getInt(“length”);
过滤掉异常的数据(如<0的数据等),最后封装到上下文中
if (gold >= 0 && watchnumpv >= 0 && follower >= 0 && length >= 0) {
// 封装数据到Text中,最后写入context上下文中
Text k2 = new Text();
k2.set(id);
Text v2 = new Text();
v2.set(gold + "\t" + watchnumpv + "\t" + follower + "\t" + length);
context.write(k2, v2);
}
(2)主类(入口类)
相当于一个程序的主函数,最先开始执行的地方
在java目录下新建一个DataCleanJob类,在主函数设置Job作业的参数信息
// 运行程序指令输入错误,直接退出程序
if (args.length != 2) {
System.exit(100);
}
Configuration conf = new Configuration(); //job需要的配置参数
Job job = Job.getInstance(conf); //创建一个job
job.setJarByClass(DataCleanJob.class);
//指定输入路径(可以是文件,也可以是目录)
FileInputFormat.setInputPaths(job, new Path(args[0]));
//指定输出路径(只能是指定一个不存在的目录)
FileOutputFormat.setOutputPath(job, new Path(args[1]));
//指定map相关代码
job.setMapperClass(DataCleanMap.class);
//指定K2的类型
job.setMapOutputKeyClass(Text.class);
总结
【Android 详细知识点思维脑图(技能树)】
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
*,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
[外链图片转存中…(img-dxybp0Ia-1715706307799)]
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!