Для вычисления квантилей я использую метод 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
.