大数据实战 --- 世界新冠疫情数据分析

news2024/11/16 23:52:29

目录

开发环境 

数据描述

功能需求

数据准备

统计计算

Hbase

Hive

分析数据


开发环境 

Hadoop+Hive+Spark+HBase

启动Hadoop:start-all.sh

启动zookeeper:zkServer.sh start

启动Hive

nohup hiveserver2 1>/dev/null 2>&1 &

beeline -u jdbc:hive2://192.168.152.192:10000

启动Hbase

start-hbase.sh

hbase shell

启动Spark:spark-shell

数据描述

countrydata.csv 是世界新冠疫情数,数据中记录了从疫情开始至 7 2 日,以国家为单位的每日新冠疫情感染人数的数据统计。字段说明如下:

功能需求

数据准备

请在 HDFS 中创建目录/app/data/exam,并将 countrydata.csv 传到该目录。

hdfs dfs -mkdir -p /app/data/exam

hdfs dfs -put ./countrydata.csv /app/data/exam

统计计算

Spark-Shell 中,加载 HDFS 文件系统 countrydata.csv 文件,并使用 RDD 完成以下统计计算。

scala> val fileRdd = sc.textFile("/app/data/exam/countrydata.csv")
scala> val yqRdd = fileRdd.map(x=>x.split(","))

①统计每个国家在数据截止统计时的累计确诊人数。

方法一:

scala> yqRdd.map(x=>(x(4),x(1).toInt)).reduceByKey((v1,v2)=>math.max(v1,v2))
.foreach(println)

方法二:

scala>yqRdd.map(x=>(x(4),x(3),x(1).toInt)).groupBy(x=>x._1)
.mapValues(x=>x.toList.sortBy(it=>(0-it._2.toLong)).max)
.map(x=>(x._1,x._2._3)).foreach(println)

方法三: 

yqRdd.map(x=>(x(4),x(1).toInt)).reduceByKey((v1,v2)=>{if(v1>v2) v1 else  v2})
.foreach(println)

②统计全世界在数据截止统计时的总感染人数。

方法一:

scala> yqRdd.map(x=>(x(4),x(1).toInt)).reduceByKey((v1,v2)=>math
.max(v1,v2)).map(x=>("all world",x._2)).reduceByKey(_+_).foreach(println)

(all world,10785407)

方法二:

scala> yqRdd.map(x=>(x(4),x(1).toInt)).reduceByKey((v1,v2)=>math.max(v1,v2))
.reduce((x,y)=>("all world", x._2+y._2))

res16: (String, Int) = (all world,10785407)

③统计每个大洲中每日新增确诊人数最多的国家及确诊人数,并输出 20200408 这一天各大洲当日新增确诊人数最多的国家及确诊人数。

scala> yqRdd.map(x=>((x(6),x(3)),(x(1).toInt,x(2).toInt,x(4))))
.reduceByKey((x,y)=>if(x._2>y._2) x else y)
.filter(x=>x._1._2=="20200408").map(x=>(x._1._1,x._2._2,x._2._3,x._1._2))
.foreach(println)

④统计每个大洲中每日累计确诊人数最多的国家及确诊人数,并输出 20200607 这一天各大洲当日累计确诊人数最多的国家及确诊人数。

scala> yqRdd.map(x=>((x(6),x(3)),(x(1).toInt,x(2).toInt,x(4))))
.reduceByKey((x,y)=>if(x._1>y._1) x else y)
.filter(x=>x._1._2=="20200607").map(x=>(x._1._1,x._2._2,x._2._3,x._1._2))
.foreach(println)

⑤统计每个大洲每月累计确诊人数,显示 202006 这个月每个大洲的累计确诊人数。

scala> yqRdd.map(x=>((x(3).substring(0,6),x(6)),x(2).toInt)).reduceByKey(_+_)
.filter(x=>x._1._1=="202006").foreach(println)

Hbase

HBase 中创建命名空间(namespaceexam,在该命名空间下创建 covid19_world 表,使用大洲和统计日期的组合作为 RowKey(如“亚洲 20200520”),该表下有 1 个列族 recordrecord 列族用于统计疫情数据(每个大洲当日新增确诊人数最多的国家record:maxIncreaseCountry 及其新增确诊人数 record:maxIncreaseCount)

hbase(main):001:0> create 'exam:covid19_world','record'

Hive

请在 Hive 中创建数据库 exam,在该数据库中创建外部表 ex_exam_record 指向 /app/data/exam 下的疫情数据 ;创建外部表 ex_exam_covid19_record 映射至 HBase 中的 exam:covid19_world 表的 record 列族

ex_exam_record 表 

create external table ex_exam_record
(
    id               string,
    confirmedCount   int,
    confirmedIncr    int,
    recordDate       string,
    countryName      string,
    countryShortCode string,
    continent        string
)
    row format delimited fields terminated by ","
    stored as textfile location "/app/data/exam";

ex_exam_covid19_record 表 

create external table ex_exam_covid19_record
(
    key                string,
    maxIncreaseCountry string,
    maxIncreaseCount   int
) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    with serdeproperties ("hbase.columns.mapping" =
            ":key,record:maxIncreaseCountry,record:maxIncreaseCount")
    tblproperties ("hbase.table.name" = "exam:covid19_world");

分析数据

使用 ex_exam_record 表中的数据

①统计每个大洲中每日新增确诊人数最多的国家,将 continent recordDate 合并成 rowkey,并保存到 ex_exam_covid19_record 表中。

insert into ex_exam_covid19_record
select t.rowkey, t.countryName, t.confirmedIncr
from (select concat(continent, recordDate)                                             rowkey,
             countryName,
             confirmedIncr,
             row_number() over (partition by countryName order by confirmedIncr desc ) max
      from ex_exam_record
      group by concat(continent, recordDate), countryName, confirmedIncr) t
where t.max = 1;

②完成统计后,在 HBase Shell 中遍历 exam:covid19_world 表中的前 20 条数据。

scan 'exam:covid19_world',{limit=>20}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/439004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于多种流量检测引擎识别pcap数据包中的威胁

在很多的场景下,会需要根据数据包判断数据包中存在的威胁。针对已有的数据包,如何判断数据包是何种攻击呢? 方法一可以根据经验,对于常见的WEB类型的攻击,比如SQL注入,命令执行等攻击,是比较容…

Radzen Blazor Studio 2.84 Crack

Radzen Blazor Studio 是一种桌面工具,它使 开发人员 能够创建漂亮的商业 Blazor 应用程序。快速地。 开放技术栈 没有供应商锁定。生成的源代码是人类可读的,您可以使用免费工具构建它。 Radzen 由流行的开源技术——ASP.NET Core、Blazor、Bootstrap …

Handler消息机制

App中一般多会有多个线程,多线程之间难免需要进行通信。开发中线程通信用的最多的就是Handler,另外还有,例如子线程进行数据处理,在主线程中进行UI更新。 当然了除了Handler这种通信方式外,线程间的通信还有其他几种方…

在线免费把Markdown格式文件转换为PDF格式

用CSDN的MarkDown编辑器在线转换 CSDN的MarkDown编辑器说实话还是挺好用的。 导出PDF操作步骤,图文配合看: 在MD编辑模式下写好MarkDown文章或者直接把要转换的MarkDown贴进来; 使用预览模式,然后在预览文件上右键选择打印&…

pycuda 安装出错解决

执行:pip install pycuda 出现:Building wheel for pycuda (PEP 517) … error 使用:pip install pycuda --no-binary :all: 不解决问题。 从源码编译 1、下载 pycuda-2021.1.tar.gz 2、tar xfz pycuda-2021.1.tar.gz 3、cd pycuda-20…

LNMP的部署

一、编译安装Nginx 服务 1、编译安装Nginx 服务的操作步骤 systemctl stop firewalld systemctl disable firewalld setenforce 01.1 安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make1.2 创建运行用户 useradd -M -s /sbin/nologin nginx1.3 编译安装 cd…

Shell编程(三)grep sed awk文本处理三剑客

上一章: Shell编程(二)_做测试的喵酱的博客-CSDN博客 一、ps命令 指令: ps作用: 主要是查看服务器的进程信息选项含义: -e:等价于 ‘-A’ ,表示列出全部的进程 -f:显示全部的列&am…

【珍藏版】SWAT模型十七项热点融合技术呈现,提升SWAT模型应用创新点

本次共十七个实践案例 1)遥感产品和SWAT模型快速建模 2)基于水文响应单元(HRU)的水资源时空分布特征 3)基于自定义流域与河道的SWAT模型建模与分析 4)子流域划分原理及其对模型不确定性的影响 5)坡度划分原理及其对模型不确定性的影响 6)DEM数据空…

站在程序猿的角度理解:UDP 协议

哈喽,大家好~我是你们的老朋友: 保护小周ღ,本期为大家带来的是 网络基础原理中的 UDP 协议,从什么协议?,认识 UDP 协议,UDP 的报文格式,UDP 传输大文件时的策略,以及 UD…

蓝库云|制造业该如何利用WMS仓库管理系统赋能企业发展

在数字化时代,制造业需要更加高效、智能、灵活地管理仓库,以满足市场的需求。WMS仓库管理系统作为一种先进的仓库管理工具,蓝库云认为WMS系统可以帮助制造企业实现数字化转型升级,提高仓库管理效率,降低成本&#xff0…

HuggingFace过去七天最流行的AI模型一览——预训练大模型绝对王者

HuggingFace是目前最火热的AI社区,很多人称之为AI模型的GitHub。包括Google、微软等很多知名企业都在上面发布模型。 HuggingFace简介:https://www.datalearner.com/blog/1051636550099750 而HuggingFace上提供的流行的模型也是大家应当关注的内容。本…

ChatGPT4写贪吃蛇游戏(Notion)[pygame的学习]

这里我使用的是Notion写出来的贪吃蛇,开始使用百度的文心一言来试下效果,生成了好几次的代码都是有bug,所以生成代码这块还得是ChatGPT。这篇主要就是了解下pygame库的一些方法,当然在没有安装这个库的,需要先安装&…

【浅谈 new 与 delete】

目录: 前言new 与 delete内置类型自定义类型operator new 与 operator deletenew 和 delete 实现原理定位new 总结 前言 打怪升级:第39天 在C语言中,我们动态申请内存的方法是使用malloc函数,它的同胞兄弟还有calloc 和realloc&a…

php使用tcpdf,通过html生成的pdf文件,合同章(图片)错位?需要怎么解决

php使用tcpdf,通过html生成的pdf文件,合同章有错位?需要怎么解决? 1、html下的排版正确,如图: 2、html代码,如图 3、生成pdf后的文件,如图 $pdf->Image(),计算一下x、…

【QT】详细介绍Qt的窗口属性:Qt::WA_DeleteOnClose属性

目录 1. close()2. WA_DeleteOnClose属性3. 测试3.1 设置了 Qt::WA_DeleteOnClose 属性3.2 未设置 Qt::WA_DeleteOnClose 属性 4. 测试代码 1. close() 当我们创建一个窗口(MainWindow, Widget, Dialog, QMessageBox, 等等)后,我们一般会调用…

matlab绘制折线图基本操作

本篇博客主要总结matlab绘制折线图的基本操作,使用的函数是plot函数,关于plot的函数语法规则,这里不再赘述,可以参考matlab官方文档,https://ww2.mathworks.cn/help/matlab/ref/plot.html#d124e1037051,不看…

GIS开源库GEOS库学习教程(三):空间关系/DE-9IM/谓词

1、DE-9IM 要判断两个多边形的关系,实际上属于几何图形空间关系判断。几何图形并不只有多边形一种,它包括点、线、面构成的任何图形,两两之间相互关系也有很多种,因此空间关系非常复杂。根据前人的研究,总结出了DE-9IM…

图论经典A-Star(A*) Algorithm最短路径,networkx,Python(1)

图论经典A-Star(A*) Algorithm最短路径,networkx,Python(1) A-Star Algorithm,即为A*(A星)算法,图的最短路径。 (1)A-Star(A*)算法需要事先知道起点和终点才…

PhpStorm 2022.3.2消除顶部Windows窗口白色区域

问题图片: 解决方法:勾选Merge main menu with window title 效果图:

第三章:JavaScript 脚本语言(一)

一、简介 JavaScript是web页面中的一种脚本语言,由客户端浏览器解释执行。不需要编译,主要作用是将静态页面转换成用户交互的动态页面。 JavaScript主要有三大部分:ECMAScript (核心),DOM(文档对象模型)&…