hive 求相互是好友.

1.求互相为好友一般原文件形式如下 , 第一步需要炸开 , 则需要使用 lateral view

A: BCDEF

B: CDEF

C: ASD

反正最后我处理的文件是 ,我只是提供这种思路.

 2. 第二步 , 根据字典排序

select  if(substr(str,1,1)>substr(str,2,1),reverse(str),str) from k2;

>我的思路是 , 把字段里面 提取出两个人 名字 ,按字典排序 , 那么小明和小华是好友 , 小华和小明是好友 , 最后都会变成 , 小明和小华 .

然后再group by ,count(*)=2的时候就是共同好友

比如 AB , A<B  则不动 , BA  ,就会变成 AB

那么处理完就这样了

select friend,count(friend) from 
(select if(substr(str,1,1)>substr(str,2,1),reverse(str) ,str ) as friend from k2) t1
group by friend where friend=2;

也就是谁和谁是好友出现了两次 , 就是共同好友 , 之所以出现两次 , 因为我们人为的把AB->AB  BA->BA ,

这样省去了 判断AB 和  BA

原文地址:https://www.cnblogs.com/alpha-cat/p/13082553.html