我正在使用pyspark为用户之间的共同朋友找到建议。初始输入文件的格式为[USER] [TAB] [FRIENDS]。例如:
0 1,2,3
1 0,2,3,4,5
2 0,1,4
3 0,1,4
4 1,2,3
5 1,6
6 5
我正尝试以[USER] [TAB] [RECOMMENDATIONS]的形式输出建议,其中建议将是与给定用户有共同朋友但尚未与给定朋友成为朋友的所有用户的列表用户。
我的代码当前为:
lines = sc.textFile("sociNet.txt", use_unicode=False)
lineSplit = lines.flatMap(lambda line: line.splitlines())
tabSplit = lineSplit.map(lambda x: tuple(filter(None, x.split())))
lonerSplit = tabSplit.filter(lambda x: len(x) == 2)
friendSplit = lonerSplit.map(lambda x: (int(x[0]), tuple(map(int, x[1].split(',')))))
friendPairs = friendSplit.flatMapValues(lambda x: x)
friendPairs.saveAsTextFile('friends')
friendSplit的格式为:
(22, (0, 29, 9436, 30156, 43400))
(23, (0,))
(24, (0, 28, 38, 38774, 53, 83, 85, 23061, 46644))
(25, (0,))
(26, (0, 17, 18071, 19051, 242))
所以它是一个元组的RDD,每个元组包含一个user_id整数和一个内部的partner_id整数元组。
friendPairs的格式为:
(14, 0)
(14, 4)
(14, 19)
(14, 19079)
(14, 42697)
(14, 444)
(14, 42748)
(15, 0)
(15, 4)
(15, 27)
(15, 80)
(16, 0)
(16, 10)
(16, 12)
(16, 18)
(16, 30)
(16, 38)
(16, 89)
所以它是一对成对朋友的RDD。
我的问题是,使用friendSplit和friendPairs在用户之间查找共同朋友的最佳方法是什么?