Spark用DSL表达式如何使用row_number函数
前言
实习生说:再spark中写开窗函数跟hive没啥两样,就像您之前写的一样,但总感觉不高端,想用DSL表达式写,但又不知道怎么写
如何用DSL表达式使用row_number函数
- 准备数据
//company app visit_times
腾讯,腾讯视频,800
腾讯,QQ音乐,900
腾讯,微信读书,100
腾讯,微信,900
腾讯,腾讯课堂,200
阿里,支付宝,900
阿里,优酷视频,700
阿里,虾米音乐,500
阿里,飞猪,700
阿里,钉钉,600
百度,百度App,700
百度,百度地图,800
百度,爱奇艺,800
百度,百度钱包,100
百度,百度贴吧,200
- 代码
val df = spark.read.textFile("./data/test").map(_.split(",")).map(x => (x(0), x(1), x(2))).toDF("company", "app", "vst_times").cache()val windows = Window.partitionBy("company").orderBy(col("vst_times").desc)//取出BAT三大公司访问量Top2的appdf.select("company", "app", "vst_times").withColumn("row_number", row_number().over(windows)).where("row_number <= 2 ").select("company", "app", "vst_times").show()
- 结果
+-------+--------+---------+
|company| app|vst_times|
+-------+--------+---------+
| 腾讯| QQ音乐| 900|
| 腾讯| 微信| 900|
| 百度|百度地图| 800|
| 百度| 爱奇艺| 800|
| 阿里| 支付宝| 900|
| 阿里|优酷视频| 700|
+-------+--------+---------+
讲解
首先得说一个在org.apache.spark.sql.expressions路径下的一个重要类Window
这里就直接拿官方的资料了:
Window extends AnyRef
Utility functions for defining window in DataFrames.// PARTITION BY country ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
Window.partitionBy("country").orderBy("date").rowsBetween(Window.unboundedPreceding, Window.currentRow)// PARTITION BY country ORDER BY date ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING
Window.partitionBy("country").orderBy("date").rowsBetween(-3, 3)
Annotations
@Stable()
Source
Window.scala
Since
1.4.0Linear Supertypes
AnyRef, Any
然后再借用
.withColumn("row_number", row_number().over(windows))
就可以实现分组取TopN了
Spark用DSL表达式如何使用row_number函数相关推荐
- pyspark及Spark报错问题汇总及某些函数用法。
此贴,主要记录本人在工作中遇到的某些报错问题,并提出自己的解决办法. 1. spark = SparkSession.builder() TypeError: 'Builder' object is ...
- SQL中row_number函数用法
row_number函数用法 1.函数讲解 2.LeetCode实战 1.函数讲解 语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) ...
- SQL ROW_NUMBER函数概述
In this article, we're going to discuss the SQL ROW_NUMBER function. This is a continuation of the S ...
- MySQL ROW_NUMBER 函数
MySQL ROW_NUMBER()函数 为结果集中的每一行生成序列号 MySQL ROW_NUMBER()从8.0版开始引入了功能.这ROW_NUMBER()是一个窗口函数或分析函数,它为从1开始应 ...
- Sql Server 2005 ROW_NUMBER 函数实现分页
过去用SQL Server 2000分页的,大多都用到了临时表.SQL Server 2005 ROW_NUMBER 函数支持分页,性能据说也非常不错. Paging Records Using SQ ...
- [转]SQL2005后的ROW_NUMBER()函数的应用
SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单 分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系 ...
- Oracle的row_number函数
row_number函数 语法格式 row_number() over (partition by a order by b) 语法说明 将表按照a字段进行分组,然后,按照b字段进行组内排序 并给出排 ...
- oracle分组_MySQL分组取TOP,实现Oracle的ROW_NUMBER函数的功能
Excel中分组排序只需要对数据进行升序降序,再利用if函数添加排序序号,即可筛选出分组top数据. Oracle也有row_number()函数对数据进行分组排序,而MySQL并没有此类函数,那么如 ...
- [MSSQL]ROW_NUMBER函数
ROW_NUMBER()在SQL2K5版本中新增,该函数返回结果集分区内行的序列号,每个分区的第一行从 1 开始,连续不间断,后跟OVER BY子句或者PARTITION BY子句 先构造一张表,放一 ...
最新文章
- Keras神经网络集成技术
- SPC在SAP QM模块中的应用
- 如何设计网站权限系统(转载)
- C#调试中,在VS的输出窗口或即时窗口显示消息
- R语言 plot()函数 基础用法
- 服务器proc文件,特殊文件系统proc
- 从物理空间到数字世界,数字孪生打造智能化基础设施
- 牛客网–华为机试在线训练6:质数因子
- matlab实现插值
- CENTOS安装XXNET
- 能学习计算机考证的手机软件有那些?推荐
- 关于DES加密内部收费版
- [Swift]LeetCode882. 细分图中的可到达结点 | Reachable Nodes In Subdivided Graph
- 图片拼图微信小程序源码下载支持多模板制作和流量主
- 关于ITIL、ITIL认证、ITIL的价值
- ef+mysql配置
- GDUT 2.25 D
- 浙江大学工程师学院篇|2022年电子信息/通信工程夏令营保研/考研复试经验贴
- 考研线性代数:矩阵的合同关系,合同对角化以及一些坑
- Mysql 后台日志写shell(root权限)
热门文章
- 一入python深似海--正則表達式
- 玩耍redis遇到的问题之记录
- axios 全攻略之基本介绍与使用(GET 与 POST)
- input里面check 状态检测
- Server.MapPath() 探究
- 如何制作手绘地图?如何将图片图层精确地对准在地图上?
- ArcEngine10.1二次开发错误: 无法嵌入互操作类型,请改用适用的接口
- Kickstart +ftp+dhcp+tftp实现Linux系统的无人值守安装
- 在.net 当中如何XML序列化一个Collection
- WebResponse 跨域访问