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

Spark Scala多列透视及RSECT条件过滤问题求助

Spark Scala 多列透视+过滤实现方案

1. 过滤目标数据

先筛选出RSECT值介于1到6之间的记录:

val filteredDF = originalDF.filter(col("RSECT").between(1, 6))

2. 实现多列透视

原生pivot仅适配单列聚合场景,多列透视用when+聚合函数(如max/first)更灵活。假设数据按ID分组,需透视的指标列为VAL1、VAL2(替换为你实际的列名即可):

import org.apache.spark.sql.functions._

// 列出所有需要做透视的指标列
val targetCols = List("VAL1", "VAL2")

// 生成每个指标对应不同RSECT的聚合表达式
val aggExpressions = targetCols.flatMap(colName => 
  (1 to 6).map(rsect => 
    max(when(col("RSECT") === rsect, col(colName))).alias(s"${colName}_R$rsect")
  )
)

// 分组聚合得到最终结果
val finalDF = filteredDF.groupBy("ID").agg(aggExpressions.head, aggExpressions.tail:_*)

关键说明

  • 使用max是因为每个ID+RSECT对应唯一指标值,max/first均可拿到正确结果,可根据你的数据特性选择
  • 若存在多个分组键(如除ID外还有其他列),将其全部加入groupBy参数即可
  • 指标列较多时,直接扩展targetCols列表,无需修改其他逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:51:22