hivesql中条件概率的窗函数乘法

4urapxun  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(510)

我有一张这样的 hive table

id, index, p
1, 1, 0.2 
1, 2, 0.1 
1, 3, 0.3 
1, 4, 0.1 
2, 1, 0.2 
2, 2, 0.3 
2, 3, 0.4

对于每个 id ,我想计算如下:

\sum_{i=1}^n(\prod _{k=1}^{i-1}(1-p_k))


例如,例如 id=2 ,这将是 p_1 + (1-p_1)*p2 + (1-p_1)*(1-p_2)*p3 因为它只有三种可能性。有没有一种方法可以在配置单元中使用窗口功能来实现这一点?

4ktjp1zp

4ktjp1zp1#

您可以尝试使用带有窗口、按id分区和按索引排序的产品。我不确定product是否有聚合函数,但如果没有,可以使用log+sum+exp来获得相同的效果。

with table1 as (
    select *, 
    sum(log(1-p)) over(partition by id order by index rows between unbounded preceding and 1 preceding) as log_sum
    from source_table
)
select id, sum(p*coalesce(exp(log_sum), 1)) as p_prod_q_prior
from table1
group by id

相关问题