开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:课时名称】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12093
聚合操作_多维聚合_cubeSQL
cubeSQL
Cube 和 rollup 算子,在 helpSQL 当中也有类似的语句。
helpSQL 直接支持 cube,但是 spark 当前的这个版本还不直接支持 cube,spark 当中支持另外一种写法,可以按照 grouping sets 进行相应聚合,下面一起去了解一下怎么完成这种聚合。
进入到代码当中,先把数据集拷贝:
注:算子是 sql 操作,只是写成了命令式并且算子中直接支持 sql 语句。
@Test
def cubesql(): unit = {
val schemaFinal = structType(
list(
structField( "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(schemaFinal)
.option( "header", value = true)
.csv( path = "dataset/ pm_final.csv")
pmFinal.createorReplaceTempview( viewName = "pm_final")
/编写 sql
Val result = spark.sql( sqlText = "select source,year,avg(pm) as pm from pm_final group by source, year " +"grouping sets ((source, year), (source), (year),())"+
"order by source asc nulls last, year asc nulls last")
注:
select 后面的内容要先编写 from 后的内容;(source,year)后的 source,year 要带上括号,表示是多个集合。
通过 grouping sets 间接实现 cube 的功能,提高控制力。
Result.show()
}
运行并查看结果集:
以上就是 sql 语句中编写 cube 代码。