我需要使用数据帧计数作为除数来计算百分比。
这就是我正在做的:
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
,因为它会立即被评估。
累加器不会有帮助,因为它们将被提前评估。
是否有方法对数据帧执行延迟计数?
您可以使用简单查询,而不是使用数据集。
val overallCount = df.select(count($"*") as "overallCount")
后来交叉加入
df
.groupBy("value")
.agg(count(lit(1)) as "groupCount")
.crossJoin(overallCount)
.select($"value", $"groupCount" / $"overallCount")