【发布时间】:2020-05-20 00:06:21
【问题描述】:
我希望能够根据百分位数进行汇总(或者更准确地说,补充百分位数)
考虑以下代码:
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
spark = SparkSession.builder.getOrCreate()
df = spark.createDataFrame(
[
['a', 1, 'w'],
['a', 1, 'y'],
['a', 11, 'x'],
['a', 111, 'zzz'],
['a', 1111, 'zz'],
['a', 1111, 'zz'],
['b', 2, 'w'],
['b', 2, 'w'],
['b', 2, 'w'],
['b', 22, 'y'],
['b', 2222, 'x'],
['b', 2222, 'z'],
],
['grp', 'val1', 'val2'])
grouped = df.groupby('grp').agg(
F.count('*').alias('count'),
F.expr('percentile(val1, array(0.5, 0.75)) as percentiles'),
# val2 manipulation....
)
grouped.show()
除了分组和百分位数计算之外,我还想分别计算补码百分位数中val2 的不同值。
例如,对于b 组,val1 的第 50 个百分位数是 12,而补码百分位数是最后 3 行,其中包含 val2 (y,x,z) 的 3 个不同值。
同样,第 75 个百分位数是 1672,补码百分位数是最后 2 行,其中包含 2 个不同的值 (x,z)。
所以我想要的输出是:
+---+-----+--------------+--------------|
|grp|count| percentiles|distinct count|
+---+-----+--------------+--------------|
| a| 6| [61.0, 861.0]|[2, 1] |
| b| 6|[12.0, 1672.0]|[3, 2] |
+---+-----+--------------+--------------|
我怎样才能做到这一点?
【问题讨论】:
-
你使用的是 spark 2.4+ 吗?
-
不幸的是,我使用的是 2.3.2
标签: apache-spark pyspark apache-spark-sql