【发布时间】:2021-11-17 04:42:11
【问题描述】:
我正在尝试计算连续 3 天每天观察到的用户数量。
3 个中间表(t0、t1、t2)中的每一个都有 2 列:uid(唯一 ID)和d0(或
d1或d2,为1,表示当天观察到用户)。
以下查询:
select d0,d1,d2, count(*) as user_count from (
select uid, 1 as d0
from my_table
where day=5 and uid is not Null
group by uid
) as t0 full outer join (
select uid, 1 as d1
from my_table
where day=6 and uid is not Null
group by uid
) as t1 on t0.uid = t1.uid
full outer join (
select uid, 1 as d2
from my_table
where day=7 and uid is not Null
group by uid
) as t2 on t0.uid = t2.uid and t1.uid = t2.uid
group by d0,d1,d2 order by d0,d1,d2
从spark.sql(q).toPandas().set_index(["d0","d1","d2"]) 产生这个输出:
user_count
d0 d1 d2
0 0 1 73455
1 0 53345
1 0 0 49254
1 0 8234
1 78455
显然缺少两行:0 1 1 和 1 0 1。 为什么?!
PS1。我明白为什么0 0 0 不见了。
PS2。 my_table 大概是这样的:
create table my_table (uid integer, day integer);
insert into my_table values
(1, 5), (1, 6), (1, 7),
(2, 5), (2, 6),
(3, 5), (3, 7),
(4, 6), (4, 7),
(5, 5),
(6, 6),
(7, 7);
对于这个表,我希望查询返回
user_count
d0 d1 d2
0 0 1 1 --- uid = 7
1 0 1 --- uid = 6
1 1 --- uid = 4
1 0 0 1 --- uid = 5
1 1 --- uid = 3
1 0 1 --- uid = 2
1 1 --- uid = 1
【问题讨论】:
标签: sql apache-spark-sql outer-join