gpt4 book ai didi

apache-spark - 计算Spark Dataframe中分组数据的分位数

转载 作者:行者123 更新时间:2023-12-04 10:23:50 65 4
gpt4 key购买 nike

我有以下Spark数据框:

 agent_id|payment_amount|
+--------+--------------+
| a| 1000|
| b| 1100|
| a| 1100|
| a| 1200|
| b| 1200|
| b| 1250|
| a| 10000|
| b| 9000|
+--------+--------------+

我的愿望输出将是这样的
agen_id   95_quantile
a whatever is 95 quantile for agent a payments
b whatever is 95 quantile for agent b payments

对于每组agent_id,我需要计算0.95分位数,我采用以下方法:
test_df.groupby('agent_id').approxQuantile('payment_amount',0.95)

但我遇到以下错误:
'GroupedData' object has no attribute 'approxQuantile'

我需要在新列中包含.95分位数(percentile),以便以后可以用于过滤目的

我正在使用Spark 2.0.0

最佳答案

一种解决方案是使用percentile_approx:

>>> test_df.registerTempTable("df")
>>> df2 = sqlContext.sql("select agent_id, percentile_approx(payment_amount,0.95) as approxQuantile from df group by agent_id")

>>> df2.show()
# +--------+-----------------+
# |agent_id| approxQuantile|
# +--------+-----------------+
# | a|8239.999999999998|
# | b|7449.999999999998|
# +--------+-----------------+

注1:此解决方案已在spark 1.6.2上进行了测试,并且需要 HiveContext

注2:在Spark <2.0中,对于approxQuantile而言, pyspark不可用。

注3: percentile返回组中数字列(包括浮点类型)的大约pth百分位数。当col中的不同值的数量小于第二个参数值时,这将给出一个精确的百分位值。

编辑: Spark 2+ 开始,不需要 HiveContext

关于apache-spark - 计算Spark Dataframe中分组数据的分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39633614/

65 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com