Maison  >  Article  >  développement back-end  >  Comment calculer efficacement la médiane et les quantiles dans Apache Spark ?

Comment calculer efficacement la médiane et les quantiles dans Apache Spark ?

DDD
DDDoriginal
2024-11-02 09:44:02141parcourir

How to Efficiently Calculate Median and Quantiles in Apache Spark?

Trouver la médiane et les quantiles dans Apache Spark

Introduction

Lorsque vous traitez de grands ensembles de données, trouver la médiane et les quantiles peut être une tâche coûteuse en termes de calcul. Les capacités informatiques distribuées de Spark le rendent bien adapté à la gestion de tels calculs.

Spark 2.0

approximation avec approxQuantile :

Spark 2.0 et versions ultérieures fournissent la méthode approxQuantile, qui exploite l'algorithme de Greenwald-Khanna pour une estimation quantile efficace. Il renvoie la valeur du quantile pour une probabilité p donnée avec un seuil d'erreur relative facultatif.

Exemple :

<code class="python"># DataFrame:
df.approxQuantile("x", [0.5], 0.25)

# RDD:
rdd.map(lambda x: (x,)).toDF().approxQuantile("x", [0.5], 0.25)</code>

SQL :

Dans l'agrégation SQL, vous pouvez utiliser la fonction approx_percentile pour estimer le quantile :

<code class="sql">SELECT approx_percentile(column, 0.5) FROM table;</code>

Pré-Spark 2.0

Échantillonnage et local Calcul :

Pour des ensembles de données plus petits ou lorsque des quantiles exacts ne sont pas requis, l'échantillonnage des données et le calcul des quantiles localement peuvent être une option viable. Cela évite les frais liés au tri et à la distribution des données.

Exemple :

<code class="python">from numpy import median

sampled_rdd = rdd.sample(False, 0.1)  # Sample 10% of the data
sampled_quantiles = median(sampled_rdd.collect())</code>

Tri et partitionnement :

Si l'échantillonnage n'est pas réalisable, le tri des données et la recherche de la médiane ou d'autres quantiles peuvent être effectués directement sur le RDD. Cependant, cette approche peut être plus lente et moins efficace que l'échantillonnage.

Exemple :

<code class="python">import numpy as np

# Sort and compute quantiles
sorted_rdd = rdd.sortBy(lambda x: x)
partition_index = int(len(rdd.collect()) * p)
partition_value = sorted_rdd.collect()[partition_index]

# Compute quantiles by splitting the partitions
if p == 0.5:
    median = partition_value
else:
    partition_value_left = sorted_rdd.collect()[partition_index - 1]
    median = partition_value_left + (p - 0.5) * (partition_value - partition_value_left)</code>

Hive UDAF :

Si vous utilisez HiveContext, vous pouvez exploiter les UDAF Hive pour calculer les quantiles :

<code class="python"># Continuous values:
sqlContext.sql("SELECT percentile(x, 0.5) FROM table")

# Integral values:
sqlContext.sql("SELECT percentile_approx(x, 0.5) FROM table")</code>

Conclusion

Spark propose diverses options pour trouver la médiane et les quantiles. Le choix de la méthode dépend de facteurs tels que la taille des données, les exigences de précision et la disponibilité de HiveContext.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn