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
相关产品推荐
相关产品推荐

