Точные квантили вместо или приблизительные в Spark? - PullRequest
2 голосов
/ 23 сентября 2019

Для вычисления квантилей я использую метод approxQuantile, доступный из функции stat() в любом Dataset или Dataframe из Spark.То, как они приближаются к ним , объясняется в этом посте .

@Test
@DisplayName("Quantiles de la population communale française")
public void quantiles() throws TechniqueException {
   Dataset<Row> populationCommunes = individus().selectExpr("populationTotale");

   double[] quantiles = populationCommunes.stat().approxQuantile("populationTotale", new double[] {0.1, 0.25, 0.5, 0.75, 0.9}, 0);
   LOGGER.info("Population des communes françaises :\n Q(10%) : {}, Q(25%) = {}, Q(50%) = {}, Q(75%) = {}, Q(90%) = {}", 
      quantiles[0], quantiles[1], quantiles[2], quantiles[3], quantiles[4]); 
}

Результаты обнадеживают:

Population des communes françaises :
 Q(10%) : 105.0, Q(25%) = 204.0, Q(50%) = 468.0, Q(75%) = 1186.0, Q(90%) = 3250.0

Но если я действительно хочу иметь точных значений квантилей, вместо приблизительных, как я могу достичь этого с помощью Spark?
Здесь у меня около 35 000 городов: я могу с удовольствием Spark потратить время на изучение каждого значенияDataset.

1 Ответ

1 голос
/ 23 сентября 2019

Функция approxQuantile в Spark может использоваться для вычисления точных квантилей.Из документации мы видим, что есть 3 параметра:

public double[][] approxQuantile(String[] cols, double[] probabilities, double relativeError)

с последним relativeError.Здесь в описании говорится:

lativeError - Относительная точность цели, которую нужно достичь (больше или равно 0).Если установлено в ноль, точные квантили вычисляются, что может быть очень дорого.Обратите внимание, что значения больше 1 принимаются, но дают тот же результат, что и 1.

Так что все, что вам нужно сделать, это установить этот параметр на 0.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...