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

如何在PySpark DataFrame中按指定列统计重复行数?

PySpark 按分组统计行数并添加到原DataFrame

需求说明

统计具有相同X、Y和DATE列值的行数,将统计结果存入新列SUM中,同时保留原DataFrame的所有行。

解决方案

使用PySpark的窗口函数实现:先按指定列分组,计算每组的总行数,再将统计值映射到组内的每一行。

代码实现

  1. 初始化环境并创建示例DataFrame
from pyspark.sql import SparkSession
from pyspark.sql.window import Window
from pyspark.sql.functions import count

spark = SparkSession.builder.appName("group_count_demo").getOrCreate()

# 示例数据
data = [
    (23, 41, 63, "2016-01-01"),
    (23, 41, 5, "2016-01-01"),
    (23, 41, 75, "2016-01-01"),
    (23, 41, 46, "2016-12-01"),
    (23, 41, 23, "2016-12-01"),
    (27, 41, 5, "2016-01-01"),
    (27, 41, 75, "2016-01-01"),
    (27, 41, 85, "2016-01-01"),
    (27, 41, 71, "2016-01-01")
]

df = spark.createDataFrame(data, ["X", "Y", "Z", "DATE"])
  1. 定义窗口分组规则
# 按X、Y、DATE列分组的窗口规范
window_spec = Window.partitionBy("X", "Y", "DATE")
  1. 添加统计列
# 统计每组行数,生成SUM列
result_df = df.withColumn("SUM", count("*").over(window_spec))
  1. 查看结果
result_df.show()

输出结果

+---+---+---+----------+---+
|  X|  Y|  Z|      DATE|SUM|
+---+---+---+----------+---+
| 23| 41| 63|2016-01-01|  3|
| 23| 41|  5|2016-01-01|  3|
| 23| 41| 75|2016-01-01|  3|
| 23| 41| 46|2016-12-01|  2|
| 23| 41| 23|2016-12-01|  2|
| 27| 41|  5|2016-01-01|  4|
| 27| 41| 75|2016-01-01|  4|
| 27| 41| 85|2016-01-01|  4|
| 27| 41| 71|2016-01-01|  4|
+---+---+---+----------+---+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:45:58