我想要求平均找到本周最繁忙的一天。
我的数据框上有一个字段日(星期一,星期二......)。
我的要求如下:
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)
如何解决我的问题?
非常感谢。
答案 0 :(得分: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
会创建一个字面值列。