Spa*_*ity 6 apache-spark apache-spark-sql
我是火花环境的新手。我的数据集的列名称如下:
我想计算每个 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;
| 归档时间: |
|
| 查看次数: |
4576 次 |
| 最近记录: |