如何在Databricks中转置字符型数据?
在Databricks中实现SAS式的数据转置操作
解决思路
你遇到的核心问题是Spark SQL的Pivot必须配合聚合函数,但只要先给每个id_request下的letter生成唯一序号,就能用聚合函数取到唯一值,实现类似SAS的转置效果。
具体操作
生成分组内序号
用窗口函数给每个id_request下的letter按顺序编号,确保每个序号对应唯一的letter:WITH numbered_data AS ( SELECT id_request, letter, -- 按id_request分组,给每组的letter编序号(可按需求调整ORDER BY字段) ROW_NUMBER() OVER (PARTITION BY id_request ORDER BY letter) AS rn FROM your_table_name -- 替换成你的实际表名 )执行Pivot转置
利用生成的序号做Pivot,因为每个序号对应唯一的letter,用FIRST()或MAX()聚合都能拿到正确值:SELECT id_request, `1` AS col1, `2` AS col2, `3` AS col3 -- 如果有更多列,继续添加`4` AS col4以此类推 FROM numbered_data PIVOT ( FIRST(letter) -- 取唯一的letter值 FOR rn IN (1, 2, 3) -- 这里的数字对应生成的序号,按需添加 ) ORDER BY id_request;
补充说明
- 要是你的数据里
id_request对应的letter数量不固定,比如有的有4个甚至更多,可以把Pivot里的序号列表扩展成(1,2,3,4,...),没对应值的列会显示NULL。 - 窗口函数里的
ORDER BY letter可以换成你需要的排序逻辑,比如按数据插入顺序的话,如果有时间戳字段就用时间戳排序。
内容的提问来源于stack exchange,提问作者Arch
相关产品推荐
相关产品推荐

