簡體   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