Hive实现共同好友统计

16 篇文章 5 订阅
10 篇文章 2 订阅

需求描述

在推荐业务场景中,会有些好友推荐的应用出现,例如现在的QQ好友推荐。那么在早些年头,关于共同好友的算法题是通过MR来实现的,也是大厂面试题中的一道。昨天跟朋友又聊到这道题目,讨论使用SQL如何实现?那么先来看下这道题的描述,以及扩展问题。
问题描述: 比如某社交公司想实现一种功能给用户推荐好友,比如小明和小张不是好友,但是他们有一个共同好友小王,那么我们就可以把小明推荐给小张,给小张推荐小明。
公司在推荐时,会根据共同好友数决定推荐的先后顺序。我们现在有以下表结构,假设数据如下::

用户user好友列表friend_list
小明小张,小李,小孙
小张小明,小李
小李小明,小张,小孙
小孙小明,小李,小王
小王小孙

那么需求来了,现在我们要统计出共同好友的数量,即输出结果包括以下三个字段(即user1和user2共同的好友数用mutual_friends_cnt表示):
举例:比如小明的好友中有小李和小张,而小张的好友里也有小李,那么小明和小张的共同好友就是小李。

最终的结果展示为:

user1user2mutual_friends_cnt
小明小张1
小明小李2
小明小孙1
小张小明1
小张小李1
小李小明2
小李小张1
小李小孙1
小孙小明1
小孙小李1

扩展问题
那么基于上面的需求,我们再次扩展一下,统计出非好友之间的共同好友数,即比如小明和小孙是好友,小孙的好友中有小王,而小王和小明不是好友,那么小王和小明之间的共同好友就是小孙。所以在推荐时就会把小王推荐给小明,把小明推荐给小王。

最终的结果展示为:

用户user1用户user2共同好友数
小明小王1
小张小孙2
小李小王1
小孙小张2
小王小明1
小王小李1

分析

该分析流程可能不是最优解,读者如果有好的思路,可在下方讨论区讨论。
1、统计好友之间的共同好友数分析
  1.1、基于现有的表结构,需要根据每个用户的好友列表A_list进行迭代找到每个好友的对应好友列表B_list
  1.2、将每个好友的对应的B_list中的元素和A_list中的元素进行比对,找到两个列表中的交集。
具体示例步骤见下图:

2、统计非好友之间的共同好友数分析
  2.1、基于现有的表结构,需要根据每个用户的好友列表A_list进行迭代找到每个好友的对应好友列表B_list
  2.2、将每个好友的对应的B_list中的元素和A_list中的元素进行比对,找到不在A_list中的元素
  2.3、按照好友列表A_list对应的用户、不在A_list中的用户且属于B_list中的用户进行组合,得到两个不关联用户之间的共同好友列表
具体示例步骤见下图:

实现

1、统计好友之间的共同好友数分析

2、统计非好友之间的共同好友数分析

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击吧大数据

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值