我是新兴的环境.我有列名的数据集如下:
user_id,Date_time,order_quantity
我想计算每个user_id的order_quantity的第90个百分位数.
如果它是sql,我会使用以下查询:
%sql
SELECT user_id, PERCENTILE_CONT ( 0.9 ) WITHIN GROUP (ORDER BY order_quantity) OVER (PARTITION BY user_id)
但是,spark没有内置支持使用percentile_cont函数.
关于我如何在上述数据集中实现这一点的任何建议?
如果需要更多信息,请告诉我.
最佳答案 我有PERCENTILE_DISC(0.9)的解决方案,它将返回最接近百分位数0.9的离散order_quantity(无插值).
想法是计算PERCENT_RANK,减去0.9并计算绝对值,然后取最小值:
SQL%
WITH temp1 AS(
选择
用户身份,
ABS(PERCENTILE_RANK()OVER
(PARTITION BY user_id ORDER BY order_quantity)-0.9)AS perc_90_temp
选择
用户身份,
FIRST_VALUE(order_quantity)OVER
(PARTITION by user_id ORDER BY perc_90_temp)AS perc_disc_90
从
temp1中;