私は、(PySparkを使って)Sparkデータフレーム上のグループ分位数を計算したいと思います。おおよその正確な結果が良いでしょう。私はgroupBy
/agg
のコンテキスト内で使用できるソリューションを好むので、他のPySpark集約関数と混在させることができます。何らかの理由でこれが不可能な場合は、別の方法でも問題ありません。PySparkグループ内のメジアン/クオンタムByB
This questionは、関連性がありますが、approxQuantile
を集計関数として使用する方法を示していません。
また、私はpercentile_approx
ハイブ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