【问题标题】:Multiplying numbers using windowing functions for conditional Probability in Hive SQL在 Hive SQL 中使用窗口函数将数字相乘以获得条件概率
【发布时间】:2020-01-09 01:14:10
【问题描述】:

我有一个像这样的蜂巢表

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 中使用窗口函数来做到这一点?

【问题讨论】:

  • 你好,p_1 是什么?
  • p_1 是与index=1相关的概率

标签: sql hive conditional-statements probability windowing


【解决方案1】:

您可以尝试使用带有窗口、按 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

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    相关资源
    最近更新 更多