1

Je dois calculer des quantiles d'étincelles sur un champ numérique après un groupe par opération. Existe-t-il un moyen d'appliquer le approxPercentile sur une liste agrégée au lieu d'une colonne?Spark percentile de calcul de données sur un tableau

E.g. Le Dataframe ressemble à

k1 | k2 | k3 | v1

a1 | b1 | c1 | 879

a2 | b2 | c2 | 769

a1 | b1 | c1 | 129

a2 | b2 | c2 | 323

J'ai besoin d'abord exécuter groupBy (k1, k2, k3) et collect_list(v1), puis calculer quantiles [10th, 50th...] sur la liste des v1 de

Répondre

2

vous pouvez utiliser percentile_approx dans sql étincelle.

Si l'on suppose que vos données sont en df, alors vous pouvez faire:

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") 

vos données d'échantillons, ce qui donne:

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