[英]Spark request avg with count
我想请求查找平均一周中最忙的一天。
我的数据框上有一个字段日(星期一,星期二...)。
我的要求如下:
mostBusyDayDF = logDF.groupBy("day_week")
.agg(functions.count("day_week").alias("cntDay"))
.groupBy("cntDay").agg(functions.avg("cntDay").alias("avgDay"))
.orderBy(functions.desc("avgDay")).limit(1).show()
结果是所有计数之和的平均值,但是我想每天平均。
例如:
我的输入
day_week
Monday
Tuesday
Monday
Monday
我想要输出
day_week count() avg()
Monday 1 1/(1+2+4+2)
Tuesday 2 2/(1+2+4+2)
Monday 4 4/(1+2+4+2)
Monday 2 2/(1+2+4+2)
我该如何解决我的问题?
非常感谢。
您需要首先对列数求和,并且有很多方法可以做到这一点,例如:
sum_count = logDF.count()
有了这个总和后,就可以执行分组并除以总和,例如:
mostBusyDayDF = logDF.groupBy("day_week")
.agg(functions.count("day_week").alias("cntDay"))
.withColumn("avgDay" , col("cntDay") / functions.lit(sum_count))
mostBusyDayDF.show()
注意: lit
创建文字值列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.