使用hive求共同好友

2021-10-06 14:39:31 字數 1862 閱讀 7253

乙個mapreduce的經典題目——求共同好友,目前網上還沒有人用hive實現,我來用hive算一下。

一、資料準備

create table friends(people string,friends string);

insert into table friends(people,friends) values('a','b,c,d,f,e,o,j');

insert into table friends(people,friends) values('b','a,c,e,k'),('c','f,a,d,i');

insert into table friends(people,friends) values('d','a,e,f,l'),('e','b,c,d,m,l'),('f','a,b,c,d,e,o,m'),('g','a,c,d,e,f'),('h','a,c,d,e,o'),('i','a,o'),('j','b,o'),('k','a,c,d'),('l','d,e,f'),('m','e,f,g'),('o','a,h,i,j'),('x','a');

select * 看一下資料,沒有問題:

二、計算過程

先貼上一下sql:

--第一步,把friends拆開

create table friends_tmp_01 as

select people,friend from friends lateral view explode(split(friends,',')) tmp as friend;

--第二步,計算

select

people2,concat_ws(',',collect_list(friend)) as common_friends

from

(--friends_tmp_01自連線之後過濾,得到「好友,使用者1,使用者2」

select

a.friend,concat(a.people,'-',b.people) as people2

from

(select people,friend from friends_tmp_01) a

join

(select people,friend from friends_tmp_01) b

on a.friend=b.friend

where a.people每一步中間結果如下,便於理解

第一步拆分的結果,生成「人,朋友」

第二步的中間結果「好友,使用者1,使用者2」如下

再把使用者1,使用者2拼接起來作為分組條件,把「使用者1-使用者2」共同的好友拼起來,就是想要的結果了

歡迎指正

mysql共同好友 Spark 實現共同好友

核心 如下 object sprk import org.apache.spark.sql.sparksession def main args array string unit logger.getlogger org setlevel level.off logger.getlogger ak...

hadoop求共同好友案例

4.1 需求分析 以下是qq的好友列表資料,冒號前是乙個使用者,冒號後是該使用者的所有好友 資料中的好友關係是單向的 a b,c,d,f,e,o b a,c,e,k c a,b,d,e,i d a,e,f,l e b,c,d,m,l f a,b,c,d,e,o,m g a,c,d,e,f h a,c...

MapReduce 共同好友

下面是a b c d e 5個人的好友情況 a b c d b a c d e c a b d e d a b c e e b c d 第一行的意思是a有bcd 3個好友,下面幾行的以此類推。請使用 map reduce 任務,完成共同好友這個功能。要求 1.描述清楚map和reduce函式的的輸入...