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
相关产品推荐
相关产品推荐

