che*_*ens 7 dataframe apache-spark apache-spark-sql pyspark
我有以下Spark数据帧:
agent_id|payment_amount|
+--------+--------------+
| a| 1000|
| b| 1100|
| a| 1100|
| a| 1200|
| b| 1200|
| b| 1250|
| a| 10000|
| b| 9000|
+--------+--------------+
Run Code Online (Sandbox Code Playgroud)
我的欲望输出会是这样的
agen_id 95_quantile
a whatever is 95 quantile for agent a payments
b whatever is 95 quantile for agent b payments
Run Code Online (Sandbox Code Playgroud)
对于每组agent_id,我需要计算0.95分位数,我采取以下方法:
test_df.groupby('agent_id').approxQuantile('payment_amount',0.95)
Run Code Online (Sandbox Code Playgroud)
但我采取以下错误:
'GroupedData' object has no attribute 'approxQuantile'
Run Code Online (Sandbox Code Playgroud)
我需要在新列中具有.95分位数(百分位数),以便稍后可用于过滤目的
我使用的是Spark 2.0.0
eli*_*sah 13
一种解决方案是使用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|
# +--------+-----------------+
Run Code Online (Sandbox Code Playgroud)
注1:此解决方案使用spark 1.6.2进行测试,需要a HiveContext.
注2: approxQuantile在Spark <2.0中不可用pyspark.
注3: percentile返回组中数字列(包括浮点类型)的近似第p个百分位数.当col中的不同值的数量小于第二个参数值时,这给出了精确的百分位值.
编辑:来自Spark 2+,HiveContext不是必需的.
| 归档时间: |
|
| 查看次数: |
13753 次 |
| 最近记录: |