文章目录
- 需求一:聚合每个类别的总价 ---- sum()
- 需求二:把名称变为小写 ---- lower()
- 需求三:把价格转为字符串的形式 ---- toStr(revenue:Long)
- 解析
一、UDF自定义函数
- 如图所示是function中的主要类别:
- UDF(User Defined Function):spark SQL中用户自定义函数,用法和spark SQL中的内置函数类似;是saprk SQL中内置函数无法满足要求,用户根据业务需求自定义的函数
定义数据集:
需求一:聚合每个类别的总价 ---- sum()
返回顶部
需求二:把名称变为小写 ---- lower()
返回顶部
需求三:把价格转为字符串的形式 ---- toStr(revenue:Long)
返回顶部
二、窗口函数 Window
窗口函数类似于oracle中的分析函数
- 聚合函数:---- 所有的聚合函数
- 排名函数:rank()、dense_rank()、row_number()
- 分析函数:first_value()、last_value()、lag()、lead()
需求:得到分类后排名前2的记录
方案一:使用常见语法子查询
通过这种方法查询出来的数据只是总数据的前两条记录。
返回顶部
方案二:使用窗口函数
SQL:
返回顶部
解析
返回顶部
partition的定义
控制哪些行会被放在一起,同时这个定义也就类似于Shuffle,会将同一个分组的数据放在同一台机器中处理
返回顶部
order的定义
在一个分组内进行排序,因为很多操作,如rank、dense_rank等都需要进行排序
返回顶部
Frame定义
Frame控制方式
返回顶部
函数部分
返回顶部
案例:统计每个商品与同类最贵商品的差值
返回顶部
总结
窗口函数和GroupBy最大的区别,就是GroupBy的聚合对每一个组只有一个结果,而窗口函数可以对每一条数据都有一个结果。也就是说,窗口函数其实就是根据当前数据,计算它在所在的组中的统计数据。