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

DDD
Libérer: 2024-11-02 09:44:02
original
158 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!