メインコンテンツまでスキップ

約パーセンタイル

順序付けられたcol個の値(最小から最大の順に並べ替え)の中で最小の値である数値列colのおおよそのpercentileを返します。この場合、 colの値のうち、その値より小さいか等しい値はpercentage以下になります。

構文

Python
from pyspark.sql import functions as sf

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

パラメーター

パラメーター

Type

説明

col

pyspark.sql.Column または文字列

入力列。

percentage

pyspark.sql.Column、float、floatのリスト、またはfloatのタプル

小数点以下のパーセンテージ(0.0 ~ 1.0 の範囲でなければなりません)。パーセンテージが配列の場合、各値は 0.0 から 1.0 までの範囲である必要があります。

accuracy

pyspark.sql.Column または整数

メモリを犠牲にして近似精度を制御する正の数値リテラル。値が大きいほど精度が高くなります。1.0/精度は相対誤差です(デフォルト: 10000)。

戻り値

pyspark.sql.Column: 数値列の近似値percentile

例1 :おおよそのパーセンタイルを計算する

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...]|
+----------------------------------------------------------+

例2 :グループ別のおおよそのパーセンタイルを計算する

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...|
+---+--------------------------------------+