approx_percentile
Renvoie la valeur percentile approximative de la colonne numérique col, qui est la plus petite valeur parmi les col valeurs ordonnées (triées de la plus petite à la plus grande) telle que pas plus de percentage des col valeurs sont inférieures ou égales à cette valeur.
Syntaxe
from pyspark.sql import functions as sf
sf.approx_percentile(col, percentage, accuracy=10000)
parameter
parameter | Type | Description |
|---|---|---|
|
| Colonne d'entrée. |
|
| Pourcentage décimal (doit être compris entre 0,0 et 1,0). Lorsque le pourcentage est un tableau, chaque valeur doit être comprise entre 0,0 et 1,0. |
|
| Un littéral numérique positif qui contrôle la précision de l'approximation au détriment de la mémoire. Une valeur plus élevée offre une meilleure précision. 1,0/accuracy is the relative error (default: 10000). |
Renvoie
pyspark.sql.Column: percentile approximatif de la colonne numérique.
Exemples
Exemple 1 : Calculer des percentiles approximatifs
from pyspark.sql import functions as sf
key = (sf.col("id") % 3).alias("key")
value = (sf.randn(42) + key * 10).alias("value")
df = spark.range(0, 1000, 1, 1).select(key, value)
df.select(
sf.approx_percentile("value", [0.25, 0.5, 0.75], 1000000)
).show(truncate=False)
+----------------------------------------------------------+
|approx_percentile(value, array(0.25, 0.5, 0.75), 1000000) |
+----------------------------------------------------------+
|[0.7264430125286..., 9.98975299938..., 19.335304783039...]|
+----------------------------------------------------------+
Exemple 2 : Calculer le percentile approximatif par groupe
from pyspark.sql import functions as sf
key = (sf.col("id") % 3).alias("key")
value = (sf.randn(42) + key * 10).alias("value")
df = spark.range(0, 1000, 1, 1).select(key, value)
df.groupBy("key").agg(
sf.approx_percentile("value", sf.lit(0.5), sf.lit(1000000))
).sort("key").show()
+---+--------------------------------------+
|key|approx_percentile(value, 0.5, 1000000)|
+---+--------------------------------------+
| 0| -0.03519435193070...|
| 1| 9.990389751837...|
| 2| 19.967859769284...|
+---+--------------------------------------+