Spark 1.4.x版本以后,为Spark SQL和DataFrame引入了开窗函数,比如最经典,最常用的,row_number(),可以让我们实现分组取topn的逻辑。
row_number()开窗函数的语法说明
首先可以,在SELECT
查询时,使用row_number()
函数 其次,row_number()函数后面先跟上OVER
关键字 然后括号中
,是PARTITION BY
,也就是说根据哪个字段进行分组 其次是可以用ORDER BY
进行组内排序 然后row_number()就可以给每个组内的行,一个组内行号
/**
* 获取各区域top3热门商品
* @param sqlContext
* @return
*/
private static JavaRDD getAreaTop3ProductRDD() {
// 使用开窗函数先进行一个子查询
// 按照area进行分组,给每个分组内的数据,按照点击次数降序排序,打上一个组内的行号
// 接着在外层查询中,过滤出各个组内的行号排名前3的数据
// 其实就是咱们的各个区域下top3热门商品
String sql = "SELECT area, product_id, click_count, city_infos, product_name, product_status "
+ "FROM ("
+ "SELECT area, product_id, click_count, city_infos, product_name, product_status, "
+ "ROW_NUMBER() OVER(PARTITION BY area ORDER BY click_count DESC) rank "
+ "FROM area_fullprod_click_count "
+ ") t "
+ "WHERE rank
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?