73、Spark SQL之开窗函数以及top3销售额统计案例实战
开窗函数以及top3销售额统计案例实战
Spark 1.4.x版本以后,为Spark SQL和DataFrame引入了开窗函数,比如最经典,最常用的,row_number(),可以让我们实现分组取topn的逻辑。
案例:统计每个种类的销售额排名前3的产品
先说明一下,row_number()开窗函数的作用
其实,就是给每个分组的数据,按照其排序顺序,打上一个分组内的行号
比如说,有一个分组date=20181231,里面有3条数据,1122,1121,1124,
那么对这个分组的每一行使用row_number()开窗函数以后,三行,依次会获得一个组内的行号
行号从1开始递增,比如1122 1,1121 2,1124 3
row_number()开窗函数的语法说明
首先可以,在SELECT查询时,使用row_number()函数
其次,row_number()函数后面先跟上OVER关键字
然后括号中,是PARTITION BY,也就是说根据哪个字段进行分组
其次是可以用ORDER BY进行组内排序
然后row_number()就可以给每个组内的行,一个组内行号
Java版本
public class RowNumberWindowFunction {public static void main(String[] args) {SparkConf conf = new SparkConf().setAppName("RowNumberWindowFunctionJava");JavaSparkContext sparkContext = new JavaSparkContext(conf);// 创建销售额表,sales表HiveContext hiveContext = new HiveContext(sparkContext.sc());hiveContext.sql("DROP TABLE IF EXISTS sales");hiveContext.sql("CREATE TABLE IF NOT EXISTS sales ("+ "product STRING,"+ "category STRING,"+ "revenue BIGINT)");hiveContext.sql("LOAD DATA "+ "LOCAL INPATH '/opt/module/datas/sparkstudy/sql/resource/sales.txt' "+ "INTO TABLE sales");DataFrame top3 = hiveContext.sql("select s.product, s.category, s.revenue " +"from ( " +"select product, category, revenue, " +"row_number() over(partition by category order by revenue desc) rank " +"from sales " +") s " +"where s.rank < 4");hiveContext.sql("DROP TABLE IF EXISTS top3_sales");top3.saveAsTable("top3_sales");}
}
Scala版本
object RowNumberWindowFunction {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("RowNumberWindowFunctionScala")val sparkContext = new SparkContext(conf)// 创建销售额表,sales表val hiveContext = new HiveContext(sparkContext)hiveContext.sql("DROP TABLE IF EXISTS sales")hiveContext.sql("CREATE TABLE IF NOT EXISTS sales ("+ "product STRING,"+ "category STRING,"+ "revenue BIGINT)")hiveContext.sql("LOAD DATA "+ "LOCAL INPATH '/opt/module/datas/sparkstudy/sql/resource/sales.txt' "+ "INTO TABLE sales")val top3 = hiveContext.sql("select s.product, s.category, s.revenue " +"from ( " +"select product, category, revenue, " +"row_number() over(partition by category order by revenue desc) rank " +"from sales " +") s " +"where s.rank < 4")hiveContext.sql("DROP TABLE IF EXISTS top3_sales")top3.write.saveAsTable("top3_sales")}
}
73、Spark SQL之开窗函数以及top3销售额统计案例实战相关推荐
- 16 ,spark sql : 开窗函数 ,top3
一 ,开窗函数 : 1 ,共几行 : sql : val sql = "select sid,sname,count(1) over() cnt from student" val ...
- Spark sql之开窗函数
目录 一.开窗函数的分类 二.聚合函数 三.排序函数 1. ROW_NUMBER 连续递增 2. RANK 跳跃排序 3. DENSE_RANK 连续排序 4. NTILE 分组排名 四.开窗函数之 ...
- Spark SQL 内置函数(五)Aggregate Functions(基于 Spark 3.2.0)
前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...
- Spark SQL 内置函数(一)Array Functions(基于 Spark 3.2.0)
前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...
- SQL:开窗函数(窗口函数)
4. 窗口函数 目录 4. 窗口函数 4.1 排序窗口函数rank 4.2 rank(), dense_rank(), row_number()区别 4.3 .排序截取数据lag(),lead(),n ...
- Spark SQL基本操作以及函数的使用
2019独角兽企业重金招聘Python工程师标准>>> 引语: 本篇博客主要介绍了Spark SQL中的filter过滤数据.去重.集合等基本操作,以及一些常用日期函数,随机函数,字 ...
- SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用
由于前一段时间胃痛,导致博客园博客都停更了一个月左右.近几天,胃病终于稍微有所好转,决定重新写博文. 前几天,有个朋友刚好问到本人有关 SQL 语句,大致是原表有两列,分别为月份.月份销售额,而需要一 ...
- 【转】SQL SERVER 开窗函数简介
在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 以SQL SERVER中分面页为例,按时间顺序列出定单号. WITH OrderInfo AS ( SELECT ROW ...
- spark sql自定义UDF函数-java语言
背景说明 基于spark sql开发过程中,需要一些类似与官网提供的 int().from_json()等自定函数处理数据.下属将简单讲解通过java如何实现spark sql自定义函数 官方UDF接 ...
最新文章
- 打开WORD2016提示 您正在试图打开带有宏的 。。。。 解决办法
- 安装linux系统报softlock,soft lockup 解决思路
- (电影播放器)MPMoviePlayerController
- NCTF2019 -- PWN部分writeup
- boost::endian模块实现benchmark的测试程序
- python大数据后期教学_大数据处理之道(十分钟学会Python)
- 萧功秦:为什么我们缺少特立独行的人生态度
- npm run test报错
- BZOJ 1295: [SCOI2009]最长距离 spfa
- Luogu P2827 蚯蚓
- VS2015中OpenCV编程插件Image Watch安装和使用介绍
- 5款网络故障排除软件
- 数据可视化 | Tableau从入门到高手 入门联接关系数据预处理
- web端第三方微信登录
- teambition/tower/team@osc/worktile团队协作工具价格比较
- 为什么行程码不能显示到县级,工信部回应
- js中的debugger调试
- yang模型中rpc_RPC校正方法研究
- java在gc正常工作的情况下_Java GC的工作原理
- 多维数组(2019.10.25)