开窗函数以及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销售额统计案例实战相关推荐

  1. 16 ,spark sql : 开窗函数 ,top3

    一 ,开窗函数 : 1 ,共几行 : sql : val sql = "select sid,sname,count(1) over() cnt from student" val ...

  2. Spark sql之开窗函数

    目录 一.开窗函数的分类 二.聚合函数 三.排序函数 1. ROW_NUMBER 连续递增 2. RANK 跳跃排序 3. DENSE_RANK 连续排序 4. NTILE 分组排名 四.开窗函数之 ...

  3. Spark SQL 内置函数(五)Aggregate Functions(基于 Spark 3.2.0)

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

  4. Spark SQL 内置函数(一)Array Functions(基于 Spark 3.2.0)

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

  5. SQL:开窗函数(窗口函数)

    4. 窗口函数 目录 4. 窗口函数 4.1 排序窗口函数rank 4.2 rank(), dense_rank(), row_number()区别 4.3 .排序截取数据lag(),lead(),n ...

  6. Spark SQL基本操作以及函数的使用

    2019独角兽企业重金招聘Python工程师标准>>> 引语: 本篇博客主要介绍了Spark SQL中的filter过滤数据.去重.集合等基本操作,以及一些常用日期函数,随机函数,字 ...

  7. SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用

    由于前一段时间胃痛,导致博客园博客都停更了一个月左右.近几天,胃病终于稍微有所好转,决定重新写博文. 前几天,有个朋友刚好问到本人有关 SQL 语句,大致是原表有两列,分别为月份.月份销售额,而需要一 ...

  8. 【转】SQL SERVER 开窗函数简介

    在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 以SQL SERVER中分面页为例,按时间顺序列出定单号. WITH OrderInfo AS ( SELECT ROW ...

  9. spark sql自定义UDF函数-java语言

    背景说明 基于spark sql开发过程中,需要一些类似与官网提供的 int().from_json()等自定函数处理数据.下属将简单讲解通过java如何实现spark sql自定义函数 官方UDF接 ...

最新文章

  1. 打开WORD2016提示 您正在试图打开带有宏的 。。。。 解决办法
  2. 安装linux系统报softlock,soft lockup 解决思路
  3. (电影播放器)MPMoviePlayerController
  4. NCTF2019 -- PWN部分writeup
  5. boost::endian模块实现benchmark的测试程序
  6. python大数据后期教学_大数据处理之道(十分钟学会Python)
  7. 萧功秦:为什么我们缺少特立独行的人生态度
  8. npm run test报错
  9. BZOJ 1295: [SCOI2009]最长距离 spfa
  10. Luogu P2827 蚯蚓
  11. VS2015中OpenCV编程插件Image Watch安装和使用介绍
  12. 5款网络故障排除软件
  13. 数据可视化 | Tableau从入门到高手 入门联接关系数据预处理
  14. web端第三方微信登录
  15. teambition/tower/team@osc/worktile团队协作工具价格比较
  16. 为什么行程码不能显示到县级,工信部回应
  17. js中的debugger调试
  18. yang模型中rpc_RPC校正方法研究
  19. java在gc正常工作的情况下_Java GC的工作原理
  20. 多维数组(2019.10.25)

热门文章

  1. vue商城:商品规格数据处理
  2. 外汇业务信息系统 功能说明书
  3. 39.SSH远程终端连接工具
  4. OneClock for mac(简约时钟工具)
  5. Win10桌面我的电脑怎么调出来?最简单方法教学
  6. AutoCAD软件盗版
  7. python学习[第十五篇] 文件系统
  8. 002Web自动化测试工具选择
  9. Matlab之xcorr函数的解释
  10. 近十年机器人学科中国学者SCI十大发文期刊