窗口函数
- 代码如下
from pyspark.sql import SparkSession from pyspark.sql.types import StructType, StringType, IntegerType, ArrayType if __name__ == '__main__': # 0.构建执行环境入口对象SparkSession spark = SparkSession.builder.\ appName("test").\ master("local[*]").\ config("spark.sql.shuffle.partitions", 2).\ getOrCreate() sc = spark.sparkContext rdd = sc.parallelize([ ('张三', 'class_1', 99), ('王五', 'class_2', 35), ('王三', 'class_3', 57), ('王久', 'class_4', 12), ('王丽', 'class_5', 99), ('王娟', 'class_1', 90), ('王军', 'class_2', 91), ('王俊', 'class_3', 33), ('王君', 'class_4', 55), ('王珺', 'class_5', 66), ('郑颖', 'class_1', 11), ('郑辉', 'class_2', 33), ('张丽', 'class_3', 36), ('张张', 'class_4', 79), ('黄凯', 'class_5', 90), ('黄开', 'class_1', 90), ('黄恺', 'class_2', 90), ('王凯', 'class_3', 11), ('王凯杰', 'class_1', 11), ('王开杰', 'class_2', 3), ('王景亮', 'class_3', 99) ]) schema = StructType()\ .add("name", StringType()). \ add("class", StringType()). \ add("score", IntegerType()) df = rdd.toDF(schema) df.createTempView("stu") spark.sql(""" SELECT *, avg(score) OVER() AS avg_score , max(score) OVER() AS max_score FROM stu """).show() spark.sql(""" SELECT *, ROW_NUMBER() OVER(ORDER BY score DESC) AS row_number_rank, DENSE_RANK() OVER( PARTITION BY class ORDER BY score DESC) AS dense_rank, RANK() OVER(ORDER BY score DESC) AS rank FROM stu """).show() spark.sql(""" SELECT *, NTILE(2) OVER(ORDER BY score DESC) FROM stu """).show(100)
- 执行结果
查看详情
+------+-------+-----+------------------+---------+ | name| class|score| avg_score|max_score| +------+-------+-----+------------------+---------+ | 张三|class_1| 99|56.666666666666664| 99| | 王五|class_2| 35|56.666666666666664| 99| | 王三|class_3| 57|56.666666666666664| 99| | 王久|class_4| 12|56.666666666666664| 99| | 王丽|class_5| 99|56.666666666666664| 99| | 王娟|class_1| 90|56.666666666666664| 99| | 王军|class_2| 91|56.666666666666664| 99| | 王俊|class_3| 33|56.666666666666664| 99| | 王君|class_4| 55|56.666666666666664| 99| | 王珺|class_5| 66|56.666666666666664| 99| | 郑颖|class_1| 11|56.666666666666664| 99| | 郑辉|class_2| 33|56.666666666666664| 99| | 张丽|class_3| 36|56.666666666666664| 99| | 张张|class_4| 79|56.666666666666664| 99| | 黄凯|class_5| 90|56.666666666666664| 99| | 黄开|class_1| 90|56.666666666666664| 99| | 黄恺|class_2| 90|56.666666666666664| 99| | 王凯|class_3| 11|56.666666666666664| 99| |王凯杰|class_1| 11|56.666666666666664| 99| |王开杰|class_2| 3|56.666666666666664| 99| +------+-------+-----+------------------+---------+ only showing top 20 rows +------+-------+-----+---------------+----------+----+ | name| class|score|row_number_rank|dense_rank|rank| +------+-------+-----+---------------+----------+----+ | 张三|class_1| 99| 1| 1| 1| | 王娟|class_1| 90| 5| 2| 5| | 黄开|class_1| 90| 7| 2| 5| | 郑颖|class_1| 11| 18| 3| 18| |王凯杰|class_1| 11| 20| 3| 18| | 王军|class_2| 91| 4| 1| 4| | 黄恺|class_2| 90| 8| 2| 5| | 王五|class_2| 35| 14| 3| 14| | 郑辉|class_2| 33| 16| 4| 15| |王开杰|class_2| 3| 21| 5| 21| |王景亮|class_3| 99| 3| 1| 1| | 王三|class_3| 57| 11| 2| 11| | 张丽|class_3| 36| 13| 3| 13| | 王俊|class_3| 33| 15| 4| 15| | 王凯|class_3| 11| 19| 5| 18| | 张张|class_4| 79| 9| 1| 9| | 王君|class_4| 55| 12| 2| 12| | 王久|class_4| 12| 17| 3| 17| | 王丽|class_5| 99| 2| 1| 1| | 黄凯|class_5| 90| 6| 2| 5| +------+-------+-----+---------------+----------+----+ only showing top 20 rows +------+-------+-----+-----------------------------------------------------------------------------------------------+ | name| class|score|ntile(2) OVER (ORDER BY score DESC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)| +------+-------+-----+-----------------------------------------------------------------------------------------------+ | 张三|class_1| 99| 1| | 王丽|class_5| 99| 1| |王景亮|class_3| 99| 1| | 王军|class_2| 91| 1| | 王娟|class_1| 90| 1| | 黄凯|class_5| 90| 1| | 黄开|class_1| 90| 1| | 黄恺|class_2| 90| 1| | 张张|class_4| 79| 1| | 王珺|class_5| 66| 1| | 王三|class_3| 57| 1| | 王君|class_4| 55| 2| | 张丽|class_3| 36| 2| | 王五|class_2| 35| 2| | 王俊|class_3| 33| 2| | 郑辉|class_2| 33| 2| | 王久|class_4| 12| 2| | 郑颖|class_1| 11| 2| | 王凯|class_3| 11| 2| |王凯杰|class_1| 11| 2| |王开杰|class_2| 3| 2| +------+-------+-----+-----------------------------------------------------------------------------------------------+
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术