结业考试总结

几个小技巧
1.collect_set
(Hive中collect相关的函数有collect_list和collect_set。
它们都是将分组中的某列转为一个数组返回,
不同的是collect_list不去重而collect_set去重。)

select student_id,score,concat_ws(",",collect_set(question_id))
from ex_exam_record group by student_id,score,question_id
==>
001  1  8523,8426
001  0.5 8574,8984
001  0   4756,8887
==>列转行
id    1          0.5        0
001 8523,8426  8574,8984  4756,8887

2.hbase 遍历exam:analysis 表 question 列族中的数据

 scan 'exam:analysis',{COLUMN=>'question'}
 //column来指定列簇名

3.HBase Shell 中遍历 exam:covid19_world 表中的前 10 条数据

scan 'exam:covid19_world',{LIMIT=>10}

4.hive建表如何跳过文件首行/末尾

tblproperties("skip.header.line.count"="1"); //跳过文件第一行

“skip.heaer.line.count” 跳过文件行首多少行

“skip.footer.line.count”跳过文件行尾多少行

5.case when 用法

case具有两种格式。简单case函数和case搜索函数。

--简单case函数
            case sex
            when '1' then '男'
            when '2' then '女'
            else '其他' end
--case搜索函数
            case when sex = '1' then '男'
            when sex = '2' then '女'
            else '其他' end

更多详情请搜素相关博客casewhen用法解析

6.hive建表
时间戳的类型,最好使用bigint,数据字节够用,不hi导致结果报错
7.rdd
灵活使用元组,reduceByKey,相结合想过更棒,可以求出很多需要的需求
①统计每个国家在数据截止统计时的累计确诊人数。(9 分)

val rdd: RDD[String] =
  sc.textFile("hdfs://192.168.195.20:9000/app/data/exam11/countrydata.csv")

rdd.map(x => x.split(",")).map(x => (x(4),x(2).toInt)).reduceByKey(_+_).foreach(println)

在这里插入图片描述

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

println(rdd1.map(x => x._2).sum())
rdd.map(x => x.split(",")).map(x => (x(4),x(2).toInt)).reduceByKey(_+_).map(x=>(“world”,x._2)).reduceByKey(_+_).foreach(println)

在这里插入图片描述

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

Rdd.map(x=>x.split(,)).filter(x=>x(3)==20200408),map(x=>((x(6),x(3)),(x(2).toInt,x(1).toInt,x(4)))).reduceBykey((v1,v2)=>if(v1._1>v2._1) v1 else v2).collect.foreach(println)

在这里插入图片描述

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

Rdd.map(x=>x.split(,)).filter(x=>x(3)==20200607),map(x=>((x(6),x(3)),(x(2).toInt,x(1).toInt,x(4)))).reduceBykey((v1,v2)=>if(v1._2>v2._2) v1 else v2).collect.foreach(println)

在这里插入图片描述

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

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

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值