1

Ich muss eine Funken Quantile auf einem numerischen Feld nach eine Gruppe von Betrieb berechnen. Gibt es eine Möglichkeit, das approximativePercentile auf eine aggregierte Liste anstelle einer Spalte anzuwenden?Spark Dataframe Berechnung Perzentil auf einem Array

z. Der Datenrahmen sieht wie folgt aus:

k1 | k2 | k3 | v1

a1 | b1 | c1 | 879

a2 | b2 | c2 | 769

a1 | b1 | c1 | 129

a2 | b2 | c2 | 323

Ich brauche erste groupBy (k1, k2, k3) und collect_list(v1), laufen und dann berechnen quantiles [10th, 50th...] auf Liste von v1 des

Antwort

2

Sie percentile_approx in Funken SQL verwenden können.

Angenommen, Ihre Daten in df ist, dann können Sie tun:

df.registerTempTable("df_tmp") 

val dfWithPercentiles = sqlContext.sql("select k1,k2,k3,percentile_approx(v1, 0.05) as 5th, percentile_approx(v1, 0.50) as 50th, percentile_approx(v1, 0.95) as 95th from df_tmp group by k1,k2,k3") 

Auf Ihrer Beispieldaten, ergibt dies:

+---+---+---+-----+-----+-----------------+ 
| k1| k2| k3| 5th| 50th|    95th| 
+---+---+---+-----+-----+-----------------+ 
| a1| b1| c1|129.0|129.0|803.9999999999999| 
| a2| b2| c2|323.0|323.0|   724.4| 
+---+---+---+-----+-----+-----------------+