Hadoop大数据招聘网数据分析综合案例

  1. Hadoop大数据综合案例1-Hadoop2.7.3伪分布式环境搭建
  2. Hadoop大数据综合案例2-HttpClient与Python招聘网数据采集
  3. Hadoop大数据综合案例3-MapReduce数据预处理
  4. Hadoop大数据综合案例4-Hive数据分析
  5. Hadoop大数据综合案例5-SSM可视化基础搭建
  6. Hadoop大数据综合案例6–数据可视化(SpringBoot+ECharts)

由于海量数据的来源是广泛的,数据类型也是多而繁杂的,因此,数据中会夹杂着不完整的、重复的以及错误的数据,如果直接使用这些原始数据的话,会严重影响数据决策的效率。因此,对原始数据进行预处理是大数据分析和应用过程中的关键环节。

数据分析

查看我们采集的数据,通过观察它的数据结构以及分析我们所需要的维度选择合适的预处理方案。
通过JSON格式化工具对数据文件page1的数据内容进行格式化处理,查看储存了职位信息的result字段。

MapReduce程序实现数据预处理的过程

通过编写MapReduce程序,实现将采集的源数据进行预处理得到目标数据的过程。

JSON数据清洗代码实现

<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.3</version>
</dependency>
package org.apache.ssm;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.CombineTextInputFormat;
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.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;import java.io.IOException;public class ClearDataJob {// Mapper类public static class ClearDataMapper extends Mapper<LongWritable, Text, Text, NullWritable> {// jackson 实例对象,用于JSON数据解析private ObjectMapper mapper = new ObjectMapper();protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {// 把每一行数据转换为JSON对象JsonNodeJsonNode jsonNode = mapper.readTree(value.toString());// 获取content对象下的positionResult对象下的result集合JsonNode nodes = jsonNode.get("content").get("positionResult").get("result");// 遍历result集合,获取每一条招聘信息数据for (JsonNode node : nodes) {// 获取招聘信息数据中的city维度,并转换为字符串类型String city = node.get("city").asText();// 获取招聘信息数据中的salary维度,转换为字符串类型,把工资中的单位k去除String salary = node.get("salary").asText().replaceAll("k", "");// 获取招聘信息数据中的companyLabelList维度,并调用自定义方法把数组转为指定分隔符的字符串String company = JsonNodeToStr(node.get("companyLabelList"), "-");// 获取招聘信息数据中的skillLables维度,并调用自定义方法把数组转为指定分隔符的字符串String skill = JsonNodeToStr(node.get("skillLables"), "-");// 把要输出文件的维度传递给自定义方法join,并指定分割符,返回拼接好的字符串Text info = join(",", city, salary, company, skill);//System.out.println(info);// 把清洗后的招聘信息写到指定的输出文件中context.write(info, NullWritable.get());}}/*** @apiNote 根据输入的字符串和分割符拼接字符串* @param sep 分割符* @param args 各维度数据,是一个可变参数数组* @return 返回根据指定分割符拼接好的字符串*/private Text join(String sep, String... args) {StringBuffer sb = new StringBuffer();for (String arg : args) {sb.append(arg).append(sep);}return new Text(sb.substring(0,sb.length()-1));}/*** @apiNote 遍历JsonNode数组,根据指定分割符返回对应的字符串* @param nodes JsonNode数组或集合* @param sep 分割符* @return 返回拼接好的字符串*/private String JsonNodeToStr(JsonNode nodes,String sep) {StringBuffer sb = new StringBuffer();for (JsonNode node : nodes) {sb.append(node.asText()).append(sep);}return sb.length() == 0 ? "" : sb.substring(0, sb.length() - 1);}}// 程序运行主方法public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(ClearDataJob.class);// 指定输入输出的文件格式job.setInputFormatClass(CombineTextInputFormat.class);job.setOutputFormatClass(TextOutputFormat.class);// 指定Mapper类以及输出key和value的类型job.setMapperClass(ClearDataMapper.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(NullWritable.class);// 指定输入和输出文件所在路径,如果输出文件路径已经存在则删除FileInputFormat.setInputPaths(job, new Path("hdfs://node:9000/lagou/20210503/*"));Path path = new Path("E:\\lagou\\output");FileSystem fs = path.getFileSystem(conf);if (fs.exists(path)) {fs.delete(path, true);}FileOutputFormat.setOutputPath(job, path);// 执行MapReduce任务,并关闭文件系统System.exit(job.waitForCompletion(true) ? 0 : 1);fs.close();System.out.println("清洗完毕..");}
}

Permission denied: user=Administrator, access=WRITE, inode="/lagou_output/_temporary/0":root:supergroup:drwxr-xr-x
在hdfs-site.xml 文件中指定权限设置:dfs.permissions.enabled=false,即可

上海,10-13,,Oracle-SQL-hive-Cognos
上海,10-15,带薪年假-岗位晋升-领导好-五险一金,数据仓库-Hadoop-Spark-Hive
上海,10-18,,Spark
上海,10-18,绩效奖金-五险一金-带薪年假-年度旅游,Hadoop-Spark
上海,10-20,通讯津贴-交通补助-双休-弹性工作,自动化测试-系统软件测试-CDP
上海,12-18,股票期权-绩效奖金-专项奖金-年底双薪,数据仓库-Hadoop-MySQL
上海,12-20,节日礼物-年底双薪-专项奖金-带薪年假,DBA-数据仓库-MySQL-SQLServer
上海,12-20,节日礼物-年底双薪-专项奖金-带薪年假,数据仓库-DBA
上海,12-24,项目奖金-零食无限量-牛逼的同事-境外旅游,
上海,13-19,年底双薪-带薪年假-交通补助-通讯津贴,Hadoop
上海,13-25,股票期权-扁平化管理-万亿市场-绩效奖金,Hive-MySQL-Hadoop-Spark
................................

修改输入输出路径打jar包

修改main方法,添加参数判断以及参数路径读取

if (args.length != 2) {System.err.println("Usage: yarn jar <jarPath> <in> <out>");System.exit(2);
}
// 指定输入和输出文件所在路径,如果输出文件路径已经存在则删除
FileInputFormat.setInputPaths(job, new Path(args[0]));
Path path = new Path(args[1]);

修改pom.xml文件,追加打包插件和配置主方法所在类路径

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version><configuration><archive><manifest><mainClass>org.apache.ssm.ClearDataJob</mainClass></manifest></archive></configuration></plugin></plugins>
</build>

把jar上传到linux系统中执行

[root@node ~]# yarn jar http_client_demo-1.0-SNAPSHOT.jar /lagou/20210503 /lagou/output

下一章 使用Hive对各维度数据进行分析,把分析结果使用Sqoop工具导出到MySQL数据库中,后续使用Java开源框架SSM进行操作,方便ECharts图表展示

Hadoop大数据综合案例3-MapReduce数据预处理相关推荐

  1. 图解大数据 | 综合案例-使用Spark分析挖掘零售交易数据

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/84 本文地址:http://www.showmeai.tech/article-det ...

  2. Hadoop综合案例 - 聊天软件数据

    目录 1.聊天软件数据分析案例需求 2.基于Hive数仓实现需求开发 2.1 建库 2.2 建表 2.3 加载数据 2.4 ETL数据清洗 2.5 需求指标统计---都很简单 3.FineBI实现可视 ...

  3. 大数据可视化案例分析_Tableau数据可视化分析案例

    0x00 Tableau简介 Tableau是一款定位于数据可视化敏捷开发和实现的商务智能展现工具,可用来实现交互的.可视化的分析和仪表盘应用. Tableau提供了体验感良好且易用的使用界面,在处理 ...

  4. 综合案例 -- 北京租房数据统计分析

    Table of Contents 1  获取数据 2  数据基本处理 2.1  重复值和空值处理 2.2  数据转换类型 2.2.1  面积数据类型转换 2.2.2  户型表达方式转换 3  图标分 ...

  5. 华为云MapReduce、ModelArts实现大数据综合案例-在线拍卖数据分析

    1.实验简介:本实验案例涉及数据预处理,数据存储,数据查询分析及可视化 展示等大数据处理的全部操作流程.首先需配置部署在线拍卖数据分 析系统所需要的环境,然后把数据集上传到HDFS 分布式文件系统, ...

  6. 大数据综合案例大作业

    来源林子雨老师的大数据案例 http://dblab.xmu.edu.cn/post/bigdatapractice2/ 需要请留言

  7. 大数据综合案例--搜狗搜索日志分析

    文档连接: https://pan.baidu.com/s/1Eq85aWfSUXTCqk5EKo8zPQ 数据链接: https://pan.baidu.com/s/1Y7qQPjBaAvLnnCQ ...

  8. python数据可视化案例销售数据_Python数据可视化教程之Matplotlib实现各种图表实例...

    前言 数据分析就是将数据以各种图表的形式展现给领导,供领导做决策用,因此熟练掌握饼图.柱状图.线图等图表制作是一个数据分析师必备的技能.Python有两个比较出色的图表制作框架,分别是Matplotl ...

  9. 【数据应用案例】关系数据的隐私保护

    案例来源:@关会华 阿里技术 案例地址:https://mp.weixin.qq.com/s/4Eqh4p0j3cDj_0M4VAG-aA 0. 背景: 1)关系数据描述的是实体与实体之间的联系,如人 ...

  10. 中国推进大数据综合试验区建设 带动经济提质增效

    (原标题:中国推进大数据综合试验区建设 带动经济提质增效) 据经济之声<天下财经>报道,在贵州省成为首个国家级大数据综合试验区后,上个月,京津冀.珠三角.上海市等七个区域获批成为第二批国家 ...

最新文章

  1. 【Groovy】集合遍历 ( 集合中有集合元素时调用 flatten 函数拉平集合元素 | 代码示例 )
  2. 更有效的加载较大的Bitmap
  3. STL库容器vector at函数
  4. tesseract-ocr tips
  5. MyBatis-Plus EntityWrapper的使用 wrapper le ge
  6. redis主从搭建和分片集群搭建
  7. 吴恩达深度学习4.3练习_Convolutional Neural Networks_Car detection
  8. jquery 左右移动 以及使用layer.js弹出框呈现在页面上
  9. 【HISI系列】之内存开辟的方法
  10. 微信内测“群直播”;小米发布第三代屏下相机技术;马斯克宣布脑机接口重大突破 | 极客头条...
  11. golang导入包的理解
  12. php获取扫描枪数据,条码扫描枪的读取技巧
  13. mac终端链接阿里云服务器
  14. Error starting userland proxy: listen tcp 0.0.0.0:xxx端口: bind: address already in use解决办法
  15. 轻松停车入位 淑女节女司机5大用车指南
  16. 使用Apache-ANT进行jar包合并
  17. JMeter - Non HTTP response code: java.net.BindException,Non HTTP response message: Address alrea...
  18. vue项目中引入阿里云滑动验证
  19. 图像处理之Matlab图像读取
  20. 【深挖字符串操作】·万字总结,这些知识点你真的懂了吗?

热门文章

  1. Java开发揭秘!java反射和映射机制
  2. php 降低视频分辨率,怎么看视频的分辨率 如何改变视频分辨率|视频分辨率修改器...
  3. CSDN内容变现渠道
  4. DevChartControl的颜色配置
  5. 电力系统负荷预测基于神经网络模型
  6. Unity中使用VideoPlayer控制播放暂停进度条
  7. 多元线性回归模型检验-续上篇
  8. linux读写磁盘文件寿命,linux下TF卡测试寿命的测试程序编写
  9. js脚本实现自由复制百度文库文字
  10. pp助手苹果版_iOS 版 PP 助手下线,再见了