繁体   English   中英

Spark请求平均计数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM