spark scala dataframe 窗户函数Window的应用 实现row_number() over(partition by , order by )

本文介绍如何使用Apache Spark SQL中的窗口函数row_number()进行数据排序和筛选操作。通过具体示例展示了如何根据预测值partition并按计数降序排列,最终选取每个分区的前三条记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要引入的包:

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._
 //scala实现row_number() over(partition by  , order by  )
 val w = Window.partitionBy($"prediction").orderBy($"count".desc)
 val dfTop3= dataDF.withColumn("rn", row_number().over(w)).where($"rn" <= 3).drop("rn")

spark2.x以后:row_number().over()

结果为:

+-----+----------+-----+
|title|prediction|count|
+-----+----------+-----+
|动物园|0         |5   |
|降压药  |0       |4   |
|通行   |0         |2    |
|合格   |1         |12    |
|艺术大师 |1    |10    |
|外白渡桥 |1   |9   |
|史记   |2         |6    |
|住院   |2        |4    |
|中秋节  |2      |3   |

 

spark2.2.1

functions包api地址:http://spark.apache.org/docs/2.2.1/api/scala/index.html#org.apache.spark.sql.functions$

Windows包api地址:http://spark.apache.org/docs/2.2.1/api/scala/index.html#org.apache.spark.sql.expressions.Window

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值