我有以下 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'
我需要在新列中包含 0.95 分位数(百分位数),以便稍后可用于过滤目的
我使用的是 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|
# +--------+-----------------+
Note 1 :该解决方案已使用 Spark 1.6.2 进行测试,并且需要HiveContext
.
Note 2 : approxQuantile
Spark pyspark.
Note 3 : percentile
返回组中数字列(包括浮点类型)的近似第 p 个百分位。当 col 中不同值的数量小于第二个参数值时,这会给出精确的百分位数值。
EDIT : From Spark 2+, HiveContext
不需要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)