我希望根据两列X,Y的输入创建链接表。如果它们是由X或Y链接,那么它们是同一个用户。
X | Y | output |
-------+------- |---------|
1 | a | u1 |
2 | b | u2 |
2 | c | u2 |
3 | d -> | u3 |
4 | e | u2 |
4 | b | u2 |
5 | - | u3 |
5 | d | u3 |
IE:X(2)和X(4)由Y(b)等链接
任何帮助都会很棒。我已尝试了一些分组,加入和联合组合,但没有运气/ PEBCAK。我也尝试了collect_set(Y)然后爆炸,但没有骰子。即使它不能完成,这将是有用的信息。
答案 0 :(得分:0)
评论太长了。
在SQL中解决此问题的一般方法是使用递归CTE。 Hive不支持递归CTE。
这给你留下了不太完美的选择。这是一个图形行走算法,并且 - 如果您知道用户之间没有太多连接 - 那么您可以使用显式join
s:
select t1.x, t1.y,
min(least(coalesce(t2.x, t1.x), coalesce(t3.x, t1.x), coalesce(t4.x, t1.x))) as grp
from t t1 join
t t2
on t1.x = t2.y left join
t t3
on t2.x = t3.y left join
t t4
on t3.x = t4.y
group by t1.x, t1.y