Я использую spark- sql -2.4.1v с Java 8. Мне нужно вычислить процентили, например, 25,75,90 для некоторых данных.
Я пытался использовать percentile_approx()
от Spark- sql, чтобы сделать это. Но результаты percentile_approx()
не соответствуют дробному процентилю таблицы Excel, в которой используется PERCENTILE.INC()
.
. Поэтому мне интересно, как исправить или настроить функцию percentile_approx()
. Есть ли способ перезаписать или написать пользовательскую функцию, изменяющую percentile_approx()
, которая правильно вычисляет дробные процентили? Как написать / изменить percentile_approx()
?
Данный набор данных:
val df = Seq(
(10, "1/15/2018", 0.010680705, 10,0.619875458, "east"),
(10, "1/15/2018", 0.006628853, 4,0.16039063, "west"),
(10, "1/15/2018", 0.01378215, 20,0.082049528, "east"),
(10, "1/15/2018", 0.810680705, 6,0.819875458, "west"),
(10, "1/15/2018", 0.702228853, 30,0.916039063, "east"))
.toDF("id", "date", "revenue", "con_dist_1", "con_dist_2", "zone")
val percentiles = Seq(0.25, 0.75,0.90) // Which percentiles to calculate
val cols = Seq("con_dist_1", "con_dist_2") // The columns to use
Мне нужно рассчитать данные процентили для каждой зоны для указанных столбцов. Как этого достичь?
Ожидаемые результаты:
+---+---------+-----------+----+------------+--------------+--------------+-------------+
| id| date| revenue|zone|perctile_col|qunantile_0.25|qunantile_0.75|qunantile_0.9|
+---+---------+-----------+----+------------+--------------+--------------+-------------+
| 10|1/15/2018|0.006628853|west| con_dist_1| 4.5| 5.5| 5.8|
| 10|1/15/2018|0.010680705|west| con_dist_1| 4.5| 5.5| 5.8|
| 10|1/15/2018|0.010680705|east| con_dist_1| 15| 25| 28.0|
| 10|1/15/2018| 0.01378215|east| con_dist_1| 15| 25| 28.0|
| 10|1/15/2018|0.006628853|east| con_dist_1| 15| 25| 28.0|
| 10|1/15/2018|0.006628853|west| con_dist_2| 0.325261837| 0.655004251| 0.7539269752|
| 10|1/15/2018|0.010680705|west| con_dist_2| 0.325261837| 0.655004251| 0.7539269752|
| 10|1/15/2018|0.010680705|east| con_dist_2| 0.350962493| 0.4990442955| 0.749241156|
| 10|1/15/2018| 0.01378215|east| con_dist_2| 0.350962493| 0.4990442955| 0.749241156|
| 10|1/15/2018|0.006628853|east| con_dist_2| 0.350962493| 0.4990442955| 0.749241156|
+---+---------+-----------+----+------------+--------------+--------------+-------------+
Результаты можно проверить с помощью «определения 2» этого URL https://www.translatorscafe.com/unit-converter/en-US/calculator/percentile/