spark 分组聚合groupBy()方法实践应用

1、groupBy()分组方法,后面跟agg()聚合方法,按照需要的聚合函数对数据进行分组聚合统计

#in python
from pyspark.sql.functions import count,min,max,avg,var_pop,stddev_pop

df.select("code", "sku", "gmv").distinct()\
        .groupBy("code")\
        .agg(
        count("sku").alias("sku_cnt"),
        min("gmv").alias("min_gmv"),
        max("gmv").alias("max_gmv"),
        avg("gmv").alias("avg_gmv"),
        stddev_pop("gmv").alias("std_gmv"),
        var_pop("gmv").alias("var_gmv")
        )\
        .sort("code")\
        .show(200)

输出结果:

 

2、对全局使用聚合函数,不用分组

#in python 
from pyspark.sql.functions import min,max,avg,var_pop,stddev_pop, count,countDistinct
   
df_users.select(
        count("sku").alias("sku_cnt"),
        countDistinct("sku").alias("sku_cnt_distinct"),
        min("gmv").alias("min_gmv"),
        max("gmv").alias("max_gmv"),
        avg("gmv").alias("avg_gmv"),
        stddev_pop("gmv").alias("std_gmv"),
        var_pop("gmv").alias("var_gmv")).show()

输出结果:【注意:去重统计countDistinct()  和不去重统计count()的结果的区别 】

 

3、正确区分语法命令输出的结果是int类型,还是DataFrame类型

3.1 返回结果是int类型

#in python
result0 = df_users.select("user_id").distinct().count()
print("result0:count is {}".format(result0)) 
#注意这里的 result0是int整数类型,不是DataFrame,所以不能.show()

3.2返回结果是DataFrame

#in python

from pyspark.sql.functions import countDistinct
df.select(countDistinct("user_id").alias("user_cnt")).show() 

#这里是DataFrame不是int,所以可以.show()

 

你可能感兴趣的:(Spark权威指南,spark,spark聚合函数,spark,groupBy,groupBy分组统计)