繁体   English   中英

Spark SQL懒惰计数

[英]Spark SQL lazy count

我需要使用数据帧计数作为除数来计算百分比。

这就是我正在做的事情:

scala> val df = Seq(1,1,1,2,2,3).toDF("value")
scala> val overallCount = df.count
scala> df.groupBy("value")
         .agg( count(lit(1)) / overallCount )

但我想避免动作df.count因为它将立即进行评估。

累积器无法提供帮助,因为它们将提前进行评估。

有没有办法在数据帧上执行惰性计数?

您可以使用简单查询,而不是使用Dataset.count

val overallCount = df.select(count($"*") as "overallCount")

然后crossJoin加入

df
  .groupBy("value")
  .agg(count(lit(1)) as "groupCount")
  .crossJoin(overallCount)
  .select($"value", $"groupCount" / $"overallCount")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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