SparkSQL开窗函数 row_number()
开始编写我们的统计逻辑,使用row_number()函数
先说明一下,row_number()开窗函数的作用
其实就是给每个分组的数据,按照其排序顺序,打上一个分组内行号
比如说,有一个分组20151001,里面有三条数据,1122,1121,1124
那么对这个分组的每一行使用row_number()开窗函数以后,三行依次会获得一个组内的行号
行号从1开始递增,比如1122,1 1121,2 1124,3row_number()开窗函数的语法说明
首先可以在select查询时,使用row_number()函数
其次,row_number()函数后面先跟上over关键字
然后括号中是partition by也就是根据哪个字段进行分组
其次是可以用order by进行组内排序
然后row_number()就可以给每个组内的行,一个组内行号
RowNumberWindowFunc.scala
package com.UDF.row_numberFUNC
import org.apache.spark.sql.{SaveMode, SparkSession}
object RowNumberWindowFunc extends App {
val spark = SparkSession
.builder()
.appName("RowNumberWindowFunc")
.master("local[2]")
.getOrCreate()
//创建销售额表,sales表
spark.sql("drop table if exists sales")
spark.sql("create table if not exists sales ("
+ "product string, "
+ "category string, "
+ "revenue bigint)")
spark.sql("load data "
+ "load inpath '/usr/local/data'"
+ "into table sales")
//开始编写我们的统计逻辑,使用row_number()函数
//先说明一下,row_number()开窗函数的作用
//其实就是给每个分组的数据,按照其排序顺序,打上一个分组内行号
//比如说,有一个分组20151001,里面有三条数据,1122,1121,1124
//那么对这个分组的每一行使用row_number()开窗函数以后,三行依次会获得一个组内的行号
//行号从1开始递增,比如1122,1 1121,2 1124,3
val top3SalesDF = spark.sql(""
+ "select product,category,revenue"
+ "from ("
+ "select product,category,revenue,"
//row_number()开窗函数的语法说明
//首先可以在select查询时,使用row_number()函数
//其次,row_number()函数后面先跟上over关键字
//然后括号中是partition by也就是根据哪个字段进行分组
//其次是可以用order by进行组内排序
//然后row_number()就可以给每个组内的行,一个组内行号
+ "row_number() over (partition by catefory order by revenue desc ) rank "
+ " from sales) tmp_sales "
+ "where rank <= 3")
//将魅族排名前三的数据,保存到一个表中
spark.sql("drop table if exists top3_sales")
top3SalesDF.write //保存,要用write开头
.mode(SaveMode.Overwrite) //覆盖模式
.format("hive") //格式hive (hive默认格式,数据文件纯文本无压缩存储)
.saveAsTable("top3_sales") //做为表保存
/**
* format支持的格式有:
* hive (hive默认格式,数据文件纯文本无压缩存储)
* parquet (spark默认采用格式)
* orc
* json
* csv
* text (若用saveAsTable只能保存一个列的df)
* jdbc
* libsvm
*/
}
SparkSQL开窗函数 row_number()的更多相关文章
- Week08_day01 (Hive开窗函数 row_number()的使用 (求出所有薪水前两名的部门))
数据准备: 7369,SMITH,CLERK,7902,1980-12-17,800,null,20 7499,ALLEN,SALESMAN,7698,1981-02-20,1600,300,30 7 ...
- 【Spark篇】---SparkSQL中自定义UDF和UDAF,开窗函数的应用
一.前述 SparkSQL中的UDF相当于是1进1出,UDAF相当于是多进一出,类似于聚合函数. 开窗函数一般分组取topn时常用. 二.UDF和UDAF函数 1.UDF函数 java代码: Spar ...
- Spark(十三)SparkSQL的自定义函数UDF与开窗函数
一 自定义函数UDF 在Spark中,也支持Hive中的自定义函数.自定义函数大致可以分为三种: UDF(User-Defined-Function),即最基本的自定义函数,类似to_char,to_ ...
- Spark之开窗函数
一.简介 开窗函数row_number()是按照某个字段分组,然后取另外一个字段排序的前几个值的函数,相当于分组topN.如果SQL语句里面使用了开窗函数,那么这个SQL语句必须使用HiveConte ...
- SQL ServerOVER 子句,over开窗函数,SQL SERVER 开窗函数
https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx http://www.cnblogs.com/85538649 ...
- 【转】SQL SERVER 开窗函数简介
在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 以SQL SERVER中分面页为例,按时间顺序列出定单号. WITH OrderInfo AS ( SELECT ROW ...
- Sql Server 开窗函数Over()的使用
利用over(),将统计信息计算出来,然后直接筛选结果集 declare @t table( ProductID int, ProductName ), ProductType ), Price in ...
- sqlserver 开窗函数Over()的使用
利用over(),将统计信息计算出来,然后直接筛选结果集 declare @t table(ProductID int,ProductName varchar(20),ProductType varc ...
- Oracle 的开窗函数 rank,dense_rank,row_number
1.开窗函数和分组函数的区别 分组函数是指按照某列或者某些列分组后进行某种计算,比如计数,求和等聚合函数进行计算. 开窗函数是指基于某列或某些列让数据有序,数据行数和原始数据数相同,依然能曾现个体数据 ...
随机推荐
- 19-python 自己建立词库并实现文章汉语词频统计
首先在网上下载一个汉语词典的txt文件, 汉语词典 1.用正则去掉词语的解释,即提取出所有汉语词语: import re def getHanYuCi(st): p = re.compile(r'[. ...
- JSFF或JSF页面加载时触发JavaScript之方法
现象一 最近在项目中遇到这么一个问题,有些页面元素是在页面加载时通过JavaScript动态渲染而成.当生成这些元素的JavaScript脚本被放置于JSPX文件中时,界面渲染没有问题.但是当我们把生 ...
- 修改RocketMQ的NameServer端口
---问题--- 有同事提出各个问题:如何修改RocketMQ的NameServer端口号?(默认:9876) ---结论--- 调查并验证之后,结论及过程如下: 验证版本:rocketmq-all- ...
- python机器学习工具包scikit-learn
scikit-learn这个非常强大的python机器学习工具包 http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.ht ...
- UVa 12093 Protecting Zonk (树形DP)
题意:给定一个有n个节点的无根树,有两种装置A和B,每种都有无限多个.在某个节点X使用A装置需要C1的花费,并且此时与节点X相连的边都被覆盖.在某个节点X使用B装置需要C2的花费,并且此时与节点X相连 ...
- LDA详解
PART 1 这个性质被叫做共轭性.共轭先验使得后验概率分布的函数形式与先验概率相同,因此使得贝叶斯分析得到了极⼤的简化. V:文档集中不重复的词汇的数目 语料库共有m篇文档,: 对于文档,由个词 ...
- (网络流)Food -- hdu -- 4292
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4292 Food Time Limit: 2000/1000 MS (Java/Others) Me ...
- #ifdef __cplusplus extern "C" { #endif 的解释
好多程序中都会遇到下列代码段: #ifdef __cplusplus extern "C" { #endif /****************** C语法代码段 ******** ...
- Android-解析JSON数据(JSON对象/JSON数组)
在上一篇博客中,Android-封装JSON数据(JSON对象/JSON数组),讲解到Android真实开发中更多的是去解析JSON数据(JSON对象/JSON数组) 封装JSON的数据是在服务器端进 ...
- spark on yarn模式下配置spark-sql访问hive元数据
spark on yarn模式下配置spark-sql访问hive元数据 目的:在spark on yarn模式下,执行spark-sql访问hive的元数据.并对比一下spark-sql 和hive ...