You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark如何按日期分组notification_date后对num列求和并降序排序

这个需求完全可以实现,两种常用实现方案如下:

方案1:直接在SQL语句中完成全逻辑

如果对SQL语法更熟悉,可以直接把分组、聚合、排序逻辑都写在SQL语句里:

from pyspark.sql.functions import col, desc

# 保留lhd_2010_name、lhd_2010_code字段的写法,需将这两个字段也加入分组条件
results = spark.sql("""
    SELECT 
        lhd_2010_name, 
        lhd_2010_code, 
        notification_date, 
        SUM(num) AS total_num 
    FROM cases_df 
    GROUP BY lhd_2010_name, lhd_2010_code, notification_date
    ORDER BY total_num DESC
""")

# 仅需要日期和对应求和结果的简化写法
# results = spark.sql("""
#     SELECT 
#         notification_date, 
#         SUM(num) AS total_num 
#     FROM cases_df 
#     GROUP BY notification_date
#     ORDER BY total_num DESC
# """)

results.show()
spark.stop()
方案2:用PySpark DataFrame API实现

如果后续还要对结果做其他DataFrame操作,这种方式灵活性更高:

from pyspark.sql.functions import col, desc, sum as spark_sum

# 先查询基础数据
base_df = spark.sql("SELECT lhd_2010_name, lhd_2010_code, notification_date, num FROM cases_df")

# 保留地区字段的分组聚合排序写法
results = base_df.groupBy("lhd_2010_name", "lhd_2010_code", "notification_date") \
          .agg(spark_sum("num").alias("total_num")) \
          .orderBy(desc("total_num"))

# 仅按日期分组的简化写法
# results = base_df.groupBy("notification_date") \
#           .agg(spark_sum("num").alias("total_num")) \
#           .orderBy(desc("total_num"))

results.show()
spark.stop()

两种方案性能基本一致,按需选择即可。

内容的提问来源于stack exchange,提问作者CKZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:24:06