Spark 数据帧计算阵列上的百分位数



我需要计算在按操作分组后在数值字段上具有火花分位数。有没有办法在聚合列表而不是列上应用大约百分位数?

例如数据帧如下所示

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),然后在 v1 的列表上计算quantiles [10th, 50th...]

你可以在Spark SQL中使用percentile_approx

假设您的数据在 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|
+---+---+---+-----+-----+-----------------+

最新更新