1

Мне нужно вычислить, имеют кванты искры на числовом поле после группа по операции. Есть ли способ применить approxPercentile в сводном списке вместо столбца?Spark Dataframe вычисление процентиля на массиве

E.g. Dataframe выглядит как

k1 | k2 | k3 | v1

a1 | b1 | c1 | 879

a2 | b2 | c2 | 769

a1 | b1 | c1 | 129

a2 | b2 | c2 | 323

мне нужно сначала запустить groupBy (k1, k2, k3) и collect_list(v1), а затем вычислить quantiles [10th, 50th...] на список v1-х

ответ

2

вы можете использовать percentile_approx в свече SQL.

Предполагая, что ваши данные в df, то вы можете сделать:

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

На данных выборки, это дает:

+---+---+---+-----+-----+-----------------+ 
| k1| k2| k3| 5th| 50th|    95th| 
+---+---+---+-----+-----+-----------------+ 
| a1| b1| c1|129.0|129.0|803.9999999999999| 
| a2| b2| c2|323.0|323.0|   724.4| 
+---+---+---+-----+-----+-----------------+ 
Смежные вопросы