聚合操作_多维聚合_rollup | 学习笔记

简介: 快速学习聚合操作_多维聚合_rollup

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段聚合操作_多维聚合_rollup】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/690/detail/12090


聚合操作_多维聚合_rollup

 

Rollup

 

Rollup 是用来做多维聚合的,并且可以使多维聚合变得非常简单。

rollup 操作符其实就是 groupBy 的一个扩展,比如 rollup(“city”,“year”)会生成两个执行计划,这个执行计划如何执行:第一步,按照 city,year 进行 groupBy;然后进行 city groupBy;最后进行全局的 groupBy。

如果传入两个参数,groupBy 三次;如果传入三次,groupBy 四次。

这是因为 rollup 会对传入的列进行滚动 groupBy , groupBy 的次数为列数量+1,最后—次是对整个数据集进行聚合。

创建数据集:

import org.apache.spark.sql.functions._

val sales = Seq(

( "Beijing",2016,100) ,

( "Beijing" ,2017,200) ,

( "Shanghai" ,2015,50) ,

( "Shanghai" ,2016,150) ,

( "Guangzhou" ,2017,50)

).toDF( "city" , "year" ,"amount" )

创建方法并将数据集 copy 进 AggProcessor.scala

@Test

def rollup(): unit = {

import org.apache.spark.sql.functions._

val sales=Seq(

("Beijirfg", 2016,100),

("Beijing",2017,200) ,

( "shanghai",2015,50),

("shanghai",2o16,150),

( "Guangzhou",2017,50)

).toDF(colNames = "city","year","amount")

注:amount 指这个城市一年的销售额

}

需求 1:统计每个城市每年的销售额

需求 2:每个城市义工的销售额

需求 3:总体销售额

要求:在结果集中出现如下类型数据:

beijing 2016 100

shanghai 2017 150

null null 250

如果忽略年份,查看 beijing 所有年份的销售额,数据类型如下:beijing null 100

如何实现上述需求及要求:

). toDF( colNames = "city", "year", "amount" )

sales. rollup( cols = 'city, 'year)

. agg( sum( " amount) as" amount" )

. sort('city.asc_ nulls_ last, 'year .asc_ nulls_ last)

注:升序排列,将空值放在后面

.show()

}

运行并查看结果集

image.png 

从结果集中可以看出:

先按 city 进行了一次排序,当年份为空时按照城市进行统计;当 city 和 year 都为空时,是总销售额。

Beijing 2016 100——按照 city,year 统计结果,代表 beijing 某一年的销售额

Beijing null 300——按照 city 统计结果 beijing 总共销售额

Null null 550——全局聚合,整个公司所有年份销售额

Rollup 就是滚动分组,滚动分组:假如传入 a、b 两列,会产生三个分组结果,第一个是 a 的分组结果,第二个是 b 的分组结果,最后是 null 的分组结果。注意 rollup 只是一个分组,最终还是要对分组结果进行聚合。

相关文章
|
6月前
|
存储 缓存 自然语言处理
elasticsearch 聚合 : 指标聚合、桶聚合、管道聚合解析使用总结
elasticsearch 聚合 : 指标聚合、桶聚合、管道聚合解析使用总结
|
7月前
|
SQL 搜索推荐 数据库
8. 聚合查询
8. 聚合查询
|
SQL 数据库管理 索引
SQL基础——聚合与排序(下)
SQL基础——聚合与排序(下)
169 0
|
SQL
SQL基础——聚合与排序(上)
SQL基础——聚合与排序(上)
77 0
|
存储
ES聚合查询详解(四):管道聚合
ES聚合查询详解(四):管道聚合
566 0
ES聚合查询详解(四):管道聚合
|
分布式计算 大数据 Spark
聚合操作_多维聚合_rollup 案例 | 学习笔记
快速学习聚合操作_多维聚合_rollup 案例
聚合操作_多维聚合_rollup 案例 | 学习笔记
|
大数据 开发者
聚合操作_多维聚合_cube | 学习笔记
快速学习聚合操作_多维聚合_cube
聚合操作_多维聚合_cube | 学习笔记
|
大数据 开发者
聚合操作_多维聚合_需求介绍 | 学习笔记
快速学习聚合操作_多维聚合_需求介绍
117 0
聚合操作_多维聚合_需求介绍 | 学习笔记
|
SQL 大数据 开发者
聚合操作_多维聚合_GroupedDataset | 学习笔记
快速学习聚合操作_多维聚合_GroupedDataset
265 0
聚合操作_多维聚合_GroupedDataset | 学习笔记
|
SQL 分布式计算 大数据
聚合操作_多维聚合_cubeSQL | 学习笔记
快速学习聚合操作_多维聚合_cubeSQL
122 0
聚合操作_多维聚合_cubeSQL | 学习笔记