使用窗口函数将数字相乘以获得 Hive 中的条件概率 SQL
Multiplying numbers using windowing functions for conditional Probability in Hive SQL
我有一个蜂巢 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
,因为它只有三个概率。有没有办法在 Hive 中使用窗口函数来做到这一点?
您可以尝试使用带窗口的产品、按 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
我有一个蜂巢 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
,因为它只有三个概率。有没有办法在 Hive 中使用窗口函数来做到这一点?
您可以尝试使用带窗口的产品、按 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