展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

窗口函数

  • 代码如下
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|
+------+-------+-----+-----------------------------------------------------------------------------------------------+
posted @ 2023-12-06 14:27  DogLeftover  阅读(7)  评论(0编辑  收藏  举报