spark 分层聚合方法rollup()实践应用

本文介绍了使用PySpark实现的rollup()分层聚合方法的两个实战案例。第一个案例展示了如何按code字段对user_id进行分组并计算不同层级的唯一用户数;第二个案例则进一步演示了同时按code1和code2字段分组,并统计每组内的不同user_id和sku数量,通过降序排列清晰展示多层级分组统计结果。

1、rollup()分层聚合方法 -实践1

#in python

from pyspark.sql.functions import count,min,max,avg,var_pop,stddev_pop,countDistinct

df.rollup("code")\
  .agg(countDistinct("user_id").alias("user_cnt"))\
  .select("code","user_cnt")\
  .orderBy("code")\
  .show(200)

输出结果:

(1)第一行,code是null,这是对所有 user_id的统计

(2)第二行之后,code不是null,这是对按照code分组后的user_id的统计

 

2、rollup()分层聚合方法 -实践2

#in python
from pyspark.sql.functions import countDistinct
from pyspark.sql.functions import desc
    
df.rollup("code1","code2")\
  .agg(countDistinct("user_id").alias("user_cnt"),
       countDistinct("sku").alias("sku_cnt"))\
  .orderBy(desc("code1"),"code2")\
  .show(200)

输出结果:因为排序的关系,可以看到 总共有2层的 层次分组

(1)第一层层次是对全部数据的统计

(2)第二层层次是固定code1下的分层统计

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值