一、需求描述
本案例以2020年美国新冠肺炎疫情数据作为数据集,以Python为编程语言,使用Spark对数据进行分析,并对分析结果进行可视化。
本次实验环境为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文件:
格式转换
原始数据集是以.csv文件组织的,为了方便spark读取生成RDD或者DataFrame,首先将us-counties.csv转换为.txt格式文件us-counties.txt。转换操作使用python实现,代码组织在toTxt.py中,具体代码
import pandas as pd
#.csv->.txt
data = pd.read_csv('/home/hadoop/us-counties.csv')
with open('/home/hadoop/us-counties.txt','a+',encoding='utf-8') as f:
for line in data.values:
f.write((str(line[0])+'\t'+str(line[1])+'\t'
+str(line[2])+'\t'+str(line[3])+'\t'+str(line[4])+'\n'))
输入命令“python3 toTxt.py”执行
转换后的us-counties.txt文件如下:
将文件上传至HDFS文件系统中
然后使用如下命令把本地文件系统的“/home/hadoop/us-counties.txt”上传到HDFS文件系统中,具体路径是“/user/hadoop/us-counties.txt”。具体命令如下:
./bin/hdfs dfs -put /home/hadoop/us-counties.txt /user/hadoop
四、使用Spark对数据进行分析
这里采用Python作为编程语言。
1. 完整代码
本部分操作的完整实验代码存放在了analyst.py中,具体如下:
from pyspark import SparkConf,SparkContext
from pyspark.sql import Row
from pyspark.sql.types import *
from pyspark.sql import SparkSession
from datetime import datetime
import pyspark.sql.functions as func
def toDate(inputStr):
newStr =