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.开窗函数和分组函数的区别 分组函数是指按照某列或者某些列分组后进行某种计算,比如计数,求和等聚合函数进行计算. 开窗函数是指基于某列或某些列让数据有序,数据行数和原始数据数相同,依然能曾现个体数据 ...
随机推荐
- ubuntu 出来菜单栏和任务栏
http://blog.csdn.net/terence1212/article/details/51340595 命令行输入:sudo apt-get install compizconfig-se ...
- Ubuntu 安装配置 nginx
作者:任明旭链接:https://www.zhihu.com/question/46241604/answer/100788789来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- PHP语言性能优化——少使用魔术方法
对以下使用魔术方法和不适用魔术方法运行时间进行比较 使用魔术方法test1.php: <?php /** * 测试类 */ class test { private $name = " ...
- 安装系统重启的时候出现了error:file '/boot/grub/i386-pc/normal.mod' not found
1.直接进入系统的时候只出现grub rescue的命令行 可以使用的命令有set和 ls 在用ls命令查看 磁盘的分区情况其中hd0 代表第一块硬盘 hd1代表第二块 使用ls 来查看存在那些系统, ...
- Mybatis之整体描述
Mybatis在我看来最大的用处就是封装了jdbc,设置参数操作和获取解析结果集.同时控制了数据库链接等操作,大部分采用了反射来映射javabean对象来进行数据库操作. 1.接下来先整体介绍下主要的 ...
- maven pom.xml中的 build说明
在Maven的pom.xml文件中,Build相关配置包含两个部分,一个是<build>,另一个是<reporting>,这里我们只介绍<build>. 1. 在M ...
- Restful风格wcf调用2——增删改查
写在前面 上篇文章介绍如何将wcf项目,修改成restful风格的接口,并在上面提供了查询的功能,上篇文章中也感谢园友在评论中的提的建议,自己也思考了下,确实是那个道理.在urltemplate中,定 ...
- ros kinect calibration
RGB camera Bring up the OpenNI driver: roslaunch openni_launch openni.launch Now follow the standard ...
- 20169205实验四 Android程序设计
20169205实验四 Android程序设计 实验内容及步骤 (一)第一个android studio项目 android studio与eclipse的传统安卓开发有一些不同之处 android ...
- (一)JQuery动态加载js的三种方法
Jquery动态加载js的三种方法如下: 第一种: $.getscript("test.js"); 例如: <script type="text/javascrip ...