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()