Расчет процента записей, имеющих значение> 2 - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь получить процент записей со значением выше 2.

Вот код:

val seq = Seq(0, 1, 2, 3)
val scores = seq.toDF("value")

Я могу добиться с помощью следующих шагов.

val totalCnt = scores.count()
val morethan2 : Long = scores.filter(col("value") > 2).count()
val percent = morethan2.toFloat/totalCnt;
println(" percent is " + percent)

Однако, каков наилучший / оптимизированный способ заставить это работать в одном выражении, возможно, с использованием агрегатной функции?

1 Ответ

0 голосов
/ 04 января 2019

Вам нужно будет сделать хотя бы одну агрегацию.Примерно так.

val seq = Seq(0, 1, 2, 3)
val scores = seq.toDF("value")
  .withColumn("all", lit(1))
  .withColumn("morethan2", when(col("value") > 2, lit(1)).otherwise(lit(0)))
  .agg(sum(col("all")).as("count"), sum(col("morethan2")).as("morethan2count"))
  .withColumn("percent", col("morethan2count") / col("count"))

val percent = scores.take(1)(0).getAs[Double]("percent")

Надеюсь, это поможет.

...