开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:聚合操作_多维聚合_rollup 案例】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12091
聚合操作_多维聚合_rollup 案例
rollup 案例
案例:对 beijing pm 值数据集进行统计
进入 AggProcessor.scala 中,创建相关代码:
@Test
def rollup1(): Unit = {
import org . apache. spark. sql. functions._
// 1.数据集读取
val schemaFinal = StructType(
List(
structF ield("source", stringType),
StructField("year",IntegerType),
StructField("month", IntegerType),
StructField("day", IntegerType),
StructField("hour", IntegerType),
StructField("season", IntegerType),
StructField("pm", DoubleType)
)
)
val pmFinal = spark . read
.schema( schemaF inal )
.option("header" ,Ivalue = true)
.csv( path= "dataset/pm final.csv")
// 2.聚合和统计
数据集中的数据大致可分为三部分,一是 source,二是时间,三是 pm 值。根据数据集可以提出以下需求:
//需求 1:每个 PM 做计量者, 每年 PM 值统计的平均数 groupby source year
//需求 2: 每个 PM 值计量者, 整体上:的 PM 平均值 groupby source
//需求 3:全局所有的计量者, 和日期的 PM 值的平均值 groupby null
pmFinal. rollup( cols = 'source, 'year)
. agg(avg('pm) as "pm" )
注:
使用 aag 要在前面导入 org . apache. spark. sql. functions.
. sort('source.asc_ nulls_ last, ' year .asc_ nulls_ last)
. show()
}
运行得到结果集:
前三行数据是每一年统计出的 Dongsi 测量的 pm 值,第四行是每一年 pm 的平均值;两个 null 代表全局的 pm 平均值。
我们知道使用 rollup 可以进行统计。