Spark--透视函数pivot应用

本文介绍了Spark中透视函数pivot的使用,通过示例展示了如何将数据行转换为列,并结合groupBy、pivot、agg和orderBy等操作进行数据处理。内容包括如何按照年月分组,选择特定项目的收入进行行列转换,最后按年月升序排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建dataframe

    val df = spark.createDataFrame(Seq(
      ("2018-01", "项目1", 100),
      ("2018-01", "项目2", 200),
      ("2018-01", "项目3", 300),
      ("2018-02", "项目1", 1000),
      ("2018-02", "项目2", 2000),
      ("2018-03", "项目x", 999))).toDF("年月", "项目", "收入")
df.show()

+-------+-----+----+

| 年月| 项目|收入|

+-------+-----+----+

|2018-01|项目1| 100|

|2018-01|项目2| 200|

|2018-01|项目3| 300|

|2018-02|项目1|1000|

|2018-02|项目2|2000|

|2018-03|项目x| 999|

+-------+-----+----+

pivot作用为:行列转换

df.groupBy("年月")
.pivot("项目", Seq("项目1","项目2","项目3","项目x","unknow"))
.agg(sum("收入"))
.orderBy(asc("年月"))
.show(false)

意思是:

  1. groupBy("年月") ->对“年月”列,进行分组

  1. pivot("项目", Seq("项目1","项目2","项目3","项目x","unknow")) -> 选中原dataframe中的“项目”列,将此表头转换为Seq中"项目1","项目2","项目3","项目x","unknow"表头

  1. agg(sum("收入")) -> 聚合和汇总“收入”列的数据,将其填到 对应新表头的行内容中

  1. orderBy(asc("年月")) -> 按照“年月”进行升序排序

年月

项目1

项目2

项目3

项目x

unknow

2018-01

100

200

300

null

null

2018-02

1000

2000

null

null

null

2018-03

null

null

null

999

null

上述代码等价于

df.groupBy("年月")
.pivot("项目", Seq("项目1","项目2","项目3","项目x","unknow"))
.sum("收入")
.orderBy(asc("年月"))
.show(false)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值