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

Apache spark 阵列上的Spark数据帧计算百分位,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我需要在一个分组运算之后,计算一个数值域上的星火分位数。有没有办法在聚合列表而不是列上应用AppExpercentile 例如。 数据帧看起来像 k1 | k2 | k3 | v1 a1 | b1 | c1 | 879 a2 | b2 | c2 | 769 a1 | b1 | c1 | 129 a2 | b2 | c2 | 323 我需要首先运行groupBy k1、k2、k3并收集_列表v1,然后计算v1列表上的分位数[10、50…]您可以在spark sql中使用百分位_近似值 假设您的数

我需要在一个分组运算之后,计算一个数值域上的星火分位数。有没有办法在聚合列表而不是列上应用AppExpercentile

例如。 数据帧看起来像

k1 | k2 | k3 | v1
a1 | b1 | c1 | 879
a2 | b2 | c2 | 769
a1 | b1 | c1 | 129
a2 | b2 | c2 | 323
我需要首先运行groupBy k1、k2、k3并收集_列表v1,然后计算v1列表上的分位数[10、50…]

您可以在spark 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|
+---+---+---+-----+-----+-----------------+
您可以在spark 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|
+---+---+---+-----+-----+-----------------+

你能告诉我这里出了什么问题吗