如何在PySpark的agg()函数中添加95百分位数计算?
在PySpark的agg函数中添加百分位数计算
你可以在agg()函数中通过两种方式加入百分位数计算,对应你的需求实现如下:
方式一:使用expr()嵌入SQL风格表达式
这种方式和你提到的selectExpr逻辑一致,直接将百分位数计算表达式传入agg():
from pyspark.sql.functions import count, avg, expr df.groupBy('day','city') .agg( count("*").alias("count"), avg(df.price).alias("avgPrice"), expr('percentile(price, 0.95)').alias("95th_percentile") )
方式二:使用PySpark内置的percentile_approx函数(推荐)
针对大数据场景,官方更推荐使用近似百分位计算函数percentile_approx,性能更优:
from pyspark.sql.functions import count, avg, percentile_approx df.groupBy('day','city') .agg( count("*").alias("count"), avg(df.price).alias("avgPrice"), percentile_approx("price", 0.95).alias("95th_percentile") )
你还可以给percentile_approx添加第三个参数指定精度(默认值为10000),数值越高精度越高但性能会略有下降,例如percentile_approx("price", 0.95, 100000)。
内容的提问来源于stack exchange,提问作者n179911a
相关产品推荐
相关产品推荐

