spark sql如何行转列

在数据仓库中,行转列通常称为”变形”(Pivoting) 或 “透视”(Pivoting),可使用Spark SQL的pivot语句实现。下面是一个简单的示例:

假设我们有如下表格:

+-------+-------+------+
| name  | brand | year |
+-------+-------+------+
| Alice | BMW   | 2017 |
| Bob   | Tesla | 2018 |
| Alice | Tesla | 2019 |
| Bob   | BMW   | 2020 |
+-------+-------+------+

我们想要把该表中的品牌列转换为4列,分别表示不同的品牌,而值则为对应品牌的年份。具体操作如下:

SELECT name, 
       COALESCE(BMW, 0) AS BMW, 
       COALESCE(Tesla, 0) AS Tesla 
FROM (
  SELECT name,
         brand,
         year 
  FROM my_table
) T
PIVOT (
  MAX(year) 
  FOR brand IN ('BMW', 'Tesla')
)

运行上面的代码,得到的结果如下所示:

+-------+------+------+
| name  | BMW  | Tesla|
+-------+------+------+
| Alice | 2017 | 2019 |
| Bob   | 2020 | 2018 |
+-------+------+------+

可以看到,原本的品牌列已经被转换成了两个新的列,并且对于每个人名,都有对应的品牌年份信息填充其中。这就是典型的行转列操作。其中,COALESCE函数用于处理可能存在的空值情况。

关注公众号“大模型全栈程序员”回复“大数据面试”获取800页左右大数据面试宝典 ,回复“大数据”获取多本大数据电子书

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注