前言

实习生说:再spark中写开窗函数跟hive没啥两样,就像您之前写的一样,但总感觉不高端,想用DSL表达式写,但又不知道怎么写

如何用DSL表达式使用row_number函数

  1. 准备数据
//company app visit_times
腾讯,腾讯视频,800
腾讯,QQ音乐,900
腾讯,微信读书,100
腾讯,微信,900
腾讯,腾讯课堂,200
阿里,支付宝,900
阿里,优酷视频,700
阿里,虾米音乐,500
阿里,飞猪,700
阿里,钉钉,600
百度,百度App,700
百度,百度地图,800
百度,爱奇艺,800
百度,百度钱包,100
百度,百度贴吧,200
  1. 代码
    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()
  1. 结果
+-------+--------+---------+
|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函数相关推荐

  1. pyspark及Spark报错问题汇总及某些函数用法。

    此贴,主要记录本人在工作中遇到的某些报错问题,并提出自己的解决办法. 1. spark = SparkSession.builder()  TypeError: 'Builder' object is ...

  2. SQL中row_number函数用法

    row_number函数用法 1.函数讲解 2.LeetCode实战 1.函数讲解 语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) ...

  3. SQL ROW_NUMBER函数概述

    In this article, we're going to discuss the SQL ROW_NUMBER function. This is a continuation of the S ...

  4. MySQL ROW_NUMBER 函数

    MySQL ROW_NUMBER()函数 为结果集中的每一行生成序列号 MySQL ROW_NUMBER()从8.0版开始引入了功能.这ROW_NUMBER()是一个窗口函数或分析函数,它为从1开始应 ...

  5. Sql Server 2005 ROW_NUMBER 函数实现分页

    过去用SQL Server 2000分页的,大多都用到了临时表.SQL Server 2005 ROW_NUMBER 函数支持分页,性能据说也非常不错. Paging Records Using SQ ...

  6. [转]SQL2005后的ROW_NUMBER()函数的应用

    SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单 分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系 ...

  7. Oracle的row_number函数

    row_number函数 语法格式 row_number() over (partition by a order by b) 语法说明 将表按照a字段进行分组,然后,按照b字段进行组内排序 并给出排 ...

  8. oracle分组_MySQL分组取TOP,实现Oracle的ROW_NUMBER函数的功能

    Excel中分组排序只需要对数据进行升序降序,再利用if函数添加排序序号,即可筛选出分组top数据. Oracle也有row_number()函数对数据进行分组排序,而MySQL并没有此类函数,那么如 ...

  9. [MSSQL]ROW_NUMBER函数

    ROW_NUMBER()在SQL2K5版本中新增,该函数返回结果集分区内行的序列号,每个分区的第一行从 1 开始,连续不间断,后跟OVER BY子句或者PARTITION BY子句 先构造一张表,放一 ...

最新文章

  1. Keras神经网络集成技术
  2. SPC在SAP QM模块中的应用
  3. 如何设计网站权限系统(转载)
  4. C#调试中,在VS的输出窗口或即时窗口显示消息
  5. R语言 plot()函数 基础用法
  6. 服务器proc文件,特殊文件系统proc
  7. 从物理空间到数字世界,数字孪生打造智能化基础设施
  8. 牛客网–华为机试在线训练6:质数因子
  9. matlab实现插值
  10. CENTOS安装XXNET
  11. 能学习计算机考证的手机软件有那些?推荐
  12. 关于DES加密内部收费版
  13. [Swift]LeetCode882. 细分图中的可到达结点 | Reachable Nodes In Subdivided Graph
  14. 图片拼图微信小程序源码下载支持多模板制作和流量主
  15. 关于ITIL、ITIL认证、ITIL的价值
  16. ef+mysql配置
  17. GDUT 2.25 D
  18. 浙江大学工程师学院篇|2022年电子信息/通信工程夏令营保研/考研复试经验贴
  19. 考研线性代数:矩阵的合同关系,合同对角化以及一些坑
  20. Mysql 后台日志写shell(root权限)

热门文章

  1. 一入python深似海--正則表達式
  2. 玩耍redis遇到的问题之记录
  3. axios 全攻略之基本介绍与使用(GET 与 POST)
  4. input里面check 状态检测
  5. Server.MapPath() 探究
  6. 如何制作手绘地图?如何将图片图层精确地对准在地图上?
  7. ArcEngine10.1二次开发错误: 无法嵌入互操作类型,请改用适用的接口
  8. Kickstart +ftp+dhcp+tftp实现Linux系统的无人值守安装
  9. 在.net 当中如何XML序列化一个Collection
  10. WebResponse 跨域访问