当前位置: 首页 > 知识库问答 >
问题:

Spark SQL Lazy count

卫泉
2023-03-14

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

这就是我正在做的:

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,因为它会立即被评估。

累加器不会有帮助,因为它们将被提前评估。

是否有方法对数据帧执行延迟计数?

共有1个答案

郏瀚
2023-03-14

您可以使用简单查询,而不是使用数据集。

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

后来交叉加入

df
  .groupBy("value")
  .agg(count(lit(1)) as "groupCount")
  .crossJoin(overallCount)
  .select($"value", $"groupCount" / $"overallCount")
 类似资料:

相关问答

相关文章

相关阅读