我想計算Spark數據框上的組分位數(使用PySpark)。無論是近似還是精確的結果都可以。我更喜歡在groupBy
/agg
的上下文中使用的解決方案,以便我可以將其與其他PySpark聚合函數混合使用。如果由於某種原因無法實現,則採用不同的方法也可以。PySpark組中的中位數/分位數通過
This question是相關的,但並不指示如何使用approxQuantile
作爲聚合函數。
我也有權訪問percentile_approx
Hive UDF,但我不知道如何將它用作聚合函數。
對於特異性起見,假設我有以下數據框:
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|
+----+-------+
請提供一個明確的例子,說明你想要達到的目標以及一些示例數據 - 不清楚爲什麼鏈接的答案不適用於你的案例 – desertnaut
簡短的回答是,問題和答案都不使用單詞「組」或「聚合」。但我會按照你的建議更新這個問題。 – abeboparebop
我認爲你可以在這個實例中使用基礎rdd和算法來計算分佈式分位數,例如[這裏](https://dataorigami.net/blogs/napkin-folding/19055451-percentile-and-quantile-estimation-of-big-data-the-t-digest)及其中的鏈接。事實上,他們鏈接到的github有一些pyspark的例子。 – ags29