apache Spark sql中的等效percentile_cont函数

Spa*_*ity 6 apache-spark apache-spark-sql

我是火花环境的新手。我的数据集的列名称如下:


用户 ID、日期时间、订单数量

我想计算每个 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)
Run Code Online (Sandbox Code Playgroud)

但是,spark 没有内置支持使用percentile_cont 函数。

关于如何在 Spark 中对上述数据集实现此功能,有什么建议吗?如果需要更多信息,请告诉我。

小智 3

我有一个 PERCENTILE_DISC (0.9) 的解决方案,它将返回最接近百分位数 0.9 的离散 order_quantity (没有插值)。想法是计算 PERCENT_RANK,减去 0.9 并计算绝对值,然后取最小值: %sql WITH temp1 AS ( SELECT user_id, ABS(PERCENTILE_RANK () OVER (PARTITION BY user_id ORDER BY order_quantity) -0.9) AS perc_90_temp SELECT user_id, FIRST_VALUE(order_quantity) OVER (PARTITION BY user_id ORDER BY perc_90_temp) AS perc_disc_90 FROM temp1;