- 需求描述
本次实验需要Linux:Ubuntu 18.04、Hadoop3.1.3、Python: 3.6、Spark: 2.4.0、Jupyter Notebook、数据集来自数据网站Kaggle的美国新冠肺炎疫情数据集,该数据集以数据表us-counties.csv组织,其中包含了美国发现首例新冠肺炎确诊病例至2020-05-19的相关数据。其中,Hadoop需要配置完全并启动,pip需要更新到22.0以上版本并利用“pip3 install pandas”命令安装pandas包,python版本要更新到3.6以上并设置成默认版本。
- 环境介绍
在Hadoop官网下载hadoop-3.1.3.tar.gz安装完成以后,创建hadoop用户,安装SSH、配置SSH无密码登陆,安装Java环境,配置Hadoop单机 (非分布式),配置Hadoop伪分布式,配置完成以后运行Hadoop伪分布式实例并创建实验所需的文件夹。
在Spark官网下载Spark2.4.0,安装Hadoop(伪分布式),安装JAVA JDK,安装Spark(Local模式)。
更新python版本到3.8、更新Python pip版本到22.0
- 数据来源描述
数据集来自数据网站Kaggle的美国新冠肺炎疫情数据集,该数据集以数据表us-counties.csv组织,其中包含了美国发现首例新冠肺炎确诊病例至2020-05-19的相关数据。数据包含以下字段:
字段名称 字段含义 例子
date 日期 2020/1/21;2020/1/22;etc
county 区县(州的下一级单位) Snohomish;
state 州 Washington
cases 截止该日期该区县的累计确诊人数 1,2,3…
deaths 截止该日期该区县的累计确诊人数 1,2,3…
- 数据上传及上传结果查看
Us-counties.csv
Us-counties.txt
5、数据处理过程描述
一、数据集
1.格式转换:
原始数据集是以.csv文件组织的,为了方便spark读取生成RDD或者DataFrame,首先将us-counties.csv转换为.txt格式文件us-counties.txt。转换操作使用python实现,代码组织在toTxt.py中
编写完成后保存,输入命令“python3 toTxt.py”执行
执行完成转换后的文件us-counties.txt如下
2. 将文件上传至HDFS文件系统中:
使用“jps”命令确认Hadoop已开启
然后使用如下命令把本地文件系统的“/home/hadoop/us-counties.txt”上传到HDFS文件系统中
二、使用Spark对数据进行分析
1.编写代码:
analyst.py由于本实验中使用的数据为结构化数据,因此可以使用spark读取源文件生成DataFrame以方便进行后续分析实现
2.执行analyst.py:
3.进行数据分析:
本实验主要统计以下8个指标,分别是:
1) 统计美国截止每日的累计确诊人数和累计死亡人数。做法是以date作为分组字段,对cases和deaths字段进行汇总统计。
2) 统计美国每日的新增确诊人数和新增死亡人数。因为新增数=今日数-昨日数,所以考虑使用自连接,连接条件是t1.date = t2.date + 1,然后使用t1.totalCases – t2.totalCases计算该日新增。
3) 统计截止5.19日,美国各州的累计确诊人数和死亡人数。首先筛选出5.19日的数据,然后以state作为分组字段,对cases和deaths字段进行汇总统计。
4) 统计截止5.19日,美国确诊人数最多的十个州。对3)的结果DataFrame注册临时表,然后按确诊人数降序排列,并取前10个州。
5) 统计截止5.19日,美国死亡人数最多的十个州。对3)的结果DataFrame注册临时表,然后按死亡人数降序排列,并取前10个州。
6) 统计截止5.19日,美国确诊人数最少的十个州。对3)的结果DataFrame注册临时表,然后按确诊人数升序排列,并取前10个州。
7) 统计截止5.19日,美国死亡人数最少的十个州。对3)的结果DataFrame注册临时表,然后按死亡人数升序排列,并取前10个州
8) 统计截止5.19日,全美和各州的病死率。病死率 = 死亡数/确诊数,对3)的结果DataFrame注册临时表,然后按公式计算。
在计算以上几个指标过程中,根据实现的简易程度,既采用了DataFrame自带的操作函数,又采用了spark sql进行操作。
4.结果:
上述Spark计算结果保存.json文件,方便后续可视化处理。由于使用Python读取HDFS文件系统不太方便,故将HDFS上结果文件转储到本地文件系统中,使用以下命令
三、数据可视化
1. 可视化工具选择与代码:
选择使用python第三方库pyecharts作为可视化工具。在使用前,需要安装pyecharts
具体可视化实现代码组织与showdata.py文件中
2. 结果图标展示
可视化结果是.html格式的,reslut1的结果展示图保存路径为“/home/hadoop/result/result1/result1.html”,reslut2的结果展示图保存路径为“/home/hadoop/result/result2/result1.html”,其余类似递推。具体截图如下:
(1)美国每日的累计确诊病例数和死亡数——>双柱状图
(2)美国每日的新增确诊病例数——>折线图
(3)美国每日的新增死亡病例数——>折线图
(4)截止5.19,美国各州累计确诊、死亡人数和病死率—>表格
(5)截止5.19,美国累计确诊人数前10的州—>词云图
(6)截止5.19,美国累计死亡人数前10的州—>象柱状图
(7)截止5.19,美国累计确诊人数最少的10个州—>词云图
(8)截止5.19,美国累计死亡人数最少的10个州—>漏斗图
(9)截止5.19,美国的病死率—>饼状图
6、经验总结
Spark使用各种各样原先需要多种不同的分布式平台的场景,包括批处理、迭代算法、交互式查询、流处理。通过在一个统一的框架下支持这些不同的计算,Spark使我们可以简单而低耗地把各种处理流程整合在一起。。而这样的组合,在实际的数据分析过程中很有意义。不仅如此,Spark的这种特性还大大减轻了原先需要对各种平台分别管理的负担。
Spark所提供的接口非常丰富。除了提供基与Python,Java、Scala和SQL的简单易用的API以及内建的丰富程序库以外,spark还能和其他大数据工具密切配合使用。
作为计算框架,Spark 速度快,开发简单,能同时兼顾批处理和实时数据分析,因此很快被广大企业级用户所采纳,并随着近年人工智能的崛起而成为分析和挖掘大数据的重要得力工具。
通过Spark进行数据分析,能够将现代爆炸式增长的大量数据“翻译”成易懂可用的可视化图像。
CSDN博客地址:XXXXXXX
参考文献
[1] 2020年美国新冠肺炎疫情数据分析_厦大数据库实验室博客[J/OL]. http://dblab.xmu.edu.cn/blog/2636-2/.
[2] Hadoop3.1.3安装教程_单机/伪分布式配置_Hadoop3.1.3/Ubuntu18.04(16.04)_厦大数据库实验室博客[J/OL]. http://dblab.xmu.edu.cn/blog/2441-2/.
[3] Spark安装和编程实践(Spark2.4.0)[J/OL]. http://dblab.xmu.edu.cn/blog/2501-2/



