PySpark数据集转置求教:不用Pandas实现指定行列转换
PySpark实现数据集转置(不依赖Pandas)
原始数据集
+-----------+-----------+ |weekend_day|totals | +-----------+-----------+ | 2023-02-25| 401943676| | 2023-03-11| 410220150| +-----------+-----------+
期望输出
----------------------------------- | | 2023-02-25 | 2023-03-11 | | totals | 401943676 | 410220150 |
解决方案
你之前用pivot未得到预期结果,核心原因是缺少固定的分组标识列。可以通过以下步骤实现转置:
- 添加固定行标识列:给原始数据新增一列(比如命名为
row_key),值固定为'totals',作为转置后的行标签。 - 执行pivot聚合:基于新增的标识列分组,以
weekend_day作为pivot的列,聚合totals字段(每个日期对应唯一值,用first或sum均可)。 - 调整列名(可选):把标识列重命名为空字符串,让输出表头完全匹配预期格式。
完整代码示例:
from pyspark.sql import functions as F # 假设原始DataFrame名为df # 添加行标识列 df_with_key = df.withColumn("row_key", F.lit("totals")) # 执行转置操作 transposed_df = df_with_key.groupBy("row_key") \ .pivot("weekend_day") \ .agg(F.first("totals")) # 重命名行标识列,匹配预期格式 transposed_df = transposed_df.withColumnRenamed("row_key", "") # 查看结果 transposed_df.show()
这段代码可直接输出目标转置结构,全程无需依赖Pandas。
内容的提问来源于stack exchange,提问作者slysid
相关产品推荐
相关产品推荐

