Pular para o conteúdo principal

percentil aproximado

Retorna o valor aproximado percentile da coluna numérica col que é o menor valor nos valores ordenados col (classificados do menor para o maior) tal que não mais do que percentage de col valores seja menor que o valor ou igual a esse valor.

Sintaxe

Python
from pyspark.sql import functions as sf

sf.approx_percentile(col, percentage, accuracy=10000)

Parâmetros

Parâmetro

Tipo

Descrição

col

pyspark.sql.Column ou str

Coluna de entrada.

percentage

pyspark.sql.Column, float, lista de floats ou tupla de floats

Porcentagem em decimal (deve estar entre 0,0 e 1,0). Quando a porcentagem é uma matriz, cada valor deve estar entre 0,0 e 1,0.

accuracy

pyspark.sql.Column ou int

Um literal numérico positivo que controla a precisão da aproximação ao custo de memória. Um valor mais alto resulta em maior precisão. 1.0/precisão é o erro relativo (default: 10000).

Devoluções

pyspark.sql.Column: aproximado percentile da coluna numérica.

Exemplos

Exemplo 1 : Calcular percentis aproximados

Python
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)
Output
+----------------------------------------------------------+
|approx_percentile(value, array(0.25, 0.5, 0.75), 1000000) |
+----------------------------------------------------------+
|[0.7264430125286..., 9.98975299938..., 19.335304783039...]|
+----------------------------------------------------------+

Exemplo 2 : Calcular o percentil aproximado por grupo

Python
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()
Output
+---+--------------------------------------+
|key|approx_percentile(value, 0.5, 1000000)|
+---+--------------------------------------+
| 0| -0.03519435193070...|
| 1| 9.990389751837...|
| 2| 19.967859769284...|
+---+--------------------------------------+