基于Key合并Spark DataFrame行的PySpark实现方案求助
PySpark 合并Pivot后同ID多行数据
针对你Pivot后出现同ID多行,需要合并为一行并保留各列有效数值的需求,可以通过分组聚合+动态列处理实现,无需提前知晓T列的数量:
实现步骤
- 提取所有动态生成的T列(排除ID列)
- 按ID分组,对每个T列取最大值(因为有效数值均大于0或极小值0E-10,max会自动保留有效数据)
代码示例
from pyspark.sql import functions as F # 假设你的DataFrame名为df # 获取所有非ID的列(即动态生成的T1、T2...Tn) t_columns = [col for col in df.columns if col != "ID"] # 分组聚合,每个T列取最大值 result_df = df.groupBy("ID").agg(*[F.max(col).alias(col) for col in t_columns]) # 查看结果 result_df.show()
原理说明
因为同ID下每个T列仅存在一个有效非零值,其余为0或极小值,max()函数会自动筛选出有效数值,完美匹配你期望的合并结果。此方法支持任意数量的动态T列,无需修改代码适配列数。
内容的提问来源于stack exchange,提问作者losforword
相关产品推荐
相关产品推荐

