Я хотел бы рассчитать групповые квантили на кадре данных Spark (используя PySpark). Либо приблизительный или точный результат будет в порядке. Я предпочитаю решение, которое я могу использовать в контексте groupBy
/agg
, чтобы я мог смешать его с другими агрегатными функциями PySpark. Если по какой-то причине это невозможно, то подойдет и другой подход.
Этот вопрос связан, но не указывает, как использовать approxQuantile
в качестве агрегатной функции.
У меня также есть доступ к UDF- percentile_approx
Pertile Percent_approx, но я не знаю, как использовать его в качестве агрегатной функции.
Предположим, у меня есть следующий фрейм данных:
from pyspark import SparkContext
import pyspark.sql.functions as f
sc = SparkContext()
df = sc.parallelize([
['A', 1],
['A', 2],
['A', 3],
['B', 4],
['B', 5],
['B', 6],
]).toDF(('grp', 'val'))
df_grp = df.groupBy('grp').agg(f.magic_percentile('val', 0.5).alias('med_val'))
df_grp.show()
Ожидаемый результат:
+----+-------+
| grp|med_val|
+----+-------+
| A| 2|
| B| 5|
+----+-------+