You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark/Scala多列DataFrame执行pivot转置操作的解决方案求助

Spark DataFrame 行列转置实现方案

实现逻辑

你需要的转置是**逆透视(Unpivot)+ 行转列(Pivot)**的组合操作,不能直接对原宽表执行pivot,需要先把col1/col2/col3从列字段转为行维度字段,再按日期做pivot。

完整实现代码

// 第一步:逆透视,将col1/col2/col3从列转为行维度
val unpivotDF = dUnion.selectExpr(
  "date",
  "stack(3, 'col1', col1, 'col2', col2, 'col3', col3) as (col, value)"
)

// 第二步:按col字段分组,pivot日期字段得到最终转置结果
val resultDF = unpivotDF.groupBy("col").pivot("date").agg(first("value"))

// 输出验证
resultDF.show()

结果验证

执行代码后输出和需求完全匹配的结果:

+-----+----------+----------+
|  col|2021-05-01|2021-05-02|
+-----+----------+----------+
| col1|        20|       200|
| col2|        30|       300|
| col3|        40|        10|
+-----+----------+----------+

原写法问题说明

之前的尝试都是直接对原宽表执行pivot,没有把需要作为行的col1/col2/col3转换为维度列,因此只能拿到单个列的聚合结果,无法生成多行的维度结构。


内容的提问来源于stack exchange,提问作者underwood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 22:06:04