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

PySpark中如何按ID分组对DataFrame的value列求和?

PySpark按ID合并行并对value列求和的解决方案

你需要的是分组聚合操作,核心是按ID和性别分组(因为同一个ID的性别一致),然后对value列求和。以下是完整的实现步骤和代码:

完整代码示例

from pyspark.sql import SparkSession
from pyspark.sql.functions import sum

# 初始化SparkSession
spark = SparkSession.builder.appName("sum_by_id").getOrCreate()

# 创建示例原DataFrame
data = [
    (1, "男", 5),
    (1, "男", 6),
    (2, "女", 3),
    (3, "女", 0),
    (3, "女", 9),
    (4, "男", 10)
]
df = spark.createDataFrame(data, schema=["ID", "性别", "value"])

# 执行分组求和
result_df = df.groupBy("ID", "性别").agg(sum("value").alias("value"))

# 展示结果
result_df.show()

代码说明

  • groupBy("ID", "性别"):将相同ID且性别相同的行归为一组(你的数据中同一个ID的性别一致,所以这样分组不会有问题)
  • agg(sum("value").alias("value")):对每个分组内的value列求和,并用alias()保持结果列名还是value
  • 执行后就能得到你期望的合并后结果

为什么之前的尝试没成功?

  • 只用groupBy("ID")的话,性别列没有对应的聚合操作,PySpark会报错,因为非分组列必须使用聚合函数处理
  • count()是统计分组内的行数,不是对value求和,所以不符合需求
  • 单纯的select无法完成分组聚合的逻辑,必须结合groupBy和聚合函数一起使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:45:38