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