PySpark如何按APP维度实现数据框行转列拆分指标?
PySpark 多指标行转列实现方案
你需要的是基于APP字段对DOWNLOADS、ACTIVE_USERS两个指标同时做行转列,直接使用PySpark内置的pivot函数即可实现,完整实现代码如下:
from pyspark.sql import functions as F # 假设你的原始数据框变量名为 df # 1. 按分组字段聚合+行转列 pivot_df = df.groupBy("ID", "DATE") \ .pivot("APP") \ .agg( F.first("DOWNLOADS").alias("DOWNLOADS"), F.first("ACTIVE_USERS").alias("ACTIVE_USERS") ) # 2. 重命名列名,匹配你需要的「APP名 - 指标名」格式 renamed_cols = [] for col_name in pivot_df.columns: if col_name in ("ID", "DATE"): renamed_cols.append(col_name) else: app, metric = col_name.split("_", 1) renamed_cols.append(F.col(col_name).alias(f"{app} - {metric}")) result_df = pivot_df.select(renamed_cols).orderBy("ID") # 输出验证结果 result_df.show(truncate=False)
注意事项
- 如果你同个DATE+APP组合下存在多条数据,可将agg中的
first替换为你需要的聚合函数,比如sum、avg等 - 若APP数量极大且你只需要固定几个APP,可以给pivot传第二个参数指定APP列表,提高执行效率,示例:
.pivot("APP", ["FACEBOOK", "INSTAGRAM"])
内容的提问来源于stack exchange,提问作者Marcos Dias
相关产品推荐
相关产品推荐

