PySpark如何按公共列分组合并DataFrame行
解决PySpark按Company合并行的问题
你之前的groupBy把所有字段都纳入分组条件了,这相当于按所有列的组合分组,自然没法合并同company的行。而且你不需要聚合计算,核心需求是把同company下各行的非空值整合到一行里。
直接用groupBy("company"),配合first/last函数并忽略空值就能实现:
from pyspark.sql import functions as F # 按company分组,提取每个字段的第一个非空值 df_merged = df.groupBy("company").agg( F.first("date", ignorenulls=True).alias("date"), F.first("value", ignorenulls=True).alias("value"), F.first("category", ignorenulls=True).alias("category") ) # 查看合并结果 df_merged.show()
代码说明
first(col, ignorenulls=True)会自动跳过空值,提取同company下对应字段的第一个非空值;如果你的数据里同company的字段有多条非空值,可根据实际需求换成last函数。- 从你的示例数据来看,每个
company的每个字段仅存在一个非空值,这个方法完全匹配你的需求,运行后会得到你想要的合并结果。
内容的提问来源于stack exchange,提问作者MasterC
相关产品推荐
相关产品推荐

