【考试真题】2020年11月份机试试卷

14 篇文章 0 订阅
10 篇文章 1 订阅

一、环境要求

sandbox-hdp 2.6.4 或同等版本自建的 Hadoop+Hive+Spark+HBase 开发环境。

二、提交结果要求

1.必须提交源码或对应分析语句,如不提交则不得分。
2.带有分析结果的功能,请分析结果的截图与代码一同提交。

三、数据描述

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

四、功能要求

1.

数据准备(共 10 分)
请在 HDFS 中创建目录/app/data/exam,并将 countrydata.csv 传到该目录。

hdfs dfs -mkdir -p /app/data/exam202011
hdfs dfs -put /opt/kb09File/countrydata.csv /app/data/exam202011/
hdfs dfs -cat /app/data/exam202011/countrydata.csv | head -n 5

在这里插入图片描述

2.

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

val fileRDD=sc.textFile("hdfs://HadoopY:9000/app/data/exam202011/")
fileRDD.take(5).foreach(println)

在这里插入图片描述

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

fileRDD.map(_.split(",")).filter(x=>x(3)=="20200702").map(x=>(x(4),x(1))).foreach(println)
或
rdd1.map(x=>(x(4),x(1).toInt))
    .reduceByKey((v1,v2)=>if(v1>v2) v1 else v2)
    .foreach(println)

在这里插入图片描述

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

fileRDD.map(_.split(",")).filter(x=>x(3)=="20200702").map(_(1).toInt).reduce(_+_)
或
println(rdd1.map(x => x(2).toInt).sum)

在这里插入图片描述

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

rdd1.map(x=>((x(6),x(3)),(x(4),x(2).toInt)))
    .reduceByKey((v1,v2)=> if (v1._2>v2._2) v1 else v2)
    .filter(x=>x._1._2.equals("20200408"))
    .map(x=>(x._1._1,x._1._2,x._2._1,x._2._2))
    .foreach(println)

在这里插入图片描述

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

rdd1.map(x=>((x(6),x(3)),(x(4),x(1).toInt)))
    .reduceByKey((v1,v2)=> if (v1._2>v2._2) v1 else v2)
    .filter(x=>x._1._2.equals("20200607"))
    .map(x=>(x._1._1,x._1._2,x._2._1,x._2._2))
    .foreach(println)

在这里插入图片描述

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

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

在这里插入图片描述

3.

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

create 'exam202011:covid19_world','record'

在这里插入图片描述

4.

请在 Hive 中创建数据库 exam,在该数据库中创建外部表 ex_exam_record 指向 /app/data/exam 下的疫情数据 ;创建外部表 ex_exam_covid19_record 映射至 HBase 中的exam:covid19_world 表的 record 列族(共 15 分)
ex_exam_record 表结构如下:
在这里插入图片描述
ex_exam_covid19_record 表结构如下:
在这里插入图片描述

create database exam202011;
use exam202011;

create table if not exists 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/exam202011/';

在这里插入图片描述

create external table if not exists 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"="exam202011:covid19_world");

5.

使用 ex_exam_record 表中的数据(共 25 分)
①统计每个大洲中每日新增确诊人数最多的国家,将 continent 和 recordDate 合并成rowkey,并保存到 ex_exam_covid19_record 表中。(20 分)

insert into ex_exam_covid19_record
select key, countryName, confirmedIncr from (
select
concat(continent, recordDate) key,
countryName,
confirmedIncr,
rank() OVER(PARTITION BY continent, recordDate ORDER BY confirmedIncr DESC) rn
from ex_exam_record) t
where t.rn=1;

在这里插入图片描述

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

scan 'exam202011:covid19_world',{LIMIT=>20}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值