pyspark - поиск рекомендаций для друзей на основе общих друзей - PullRequest
0 голосов
/ 29 сентября 2018

Я использую 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

Я пытаюсь вывести предложения в виде [ПОЛЬЗОВАТЕЛЬ] [TAB] [РЕКОМЕНДАЦИИ], где в качестве рекомендаций будет представлен список всех пользователей, у которых есть общие друзья для данного пользователя.пользователь, но еще не дружит с данным пользователем.

Мой код в настоящее время:

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))

Так что этоСДР кортежей, каждый кортеж содержит целое число user_id и внутренний кортеж целых чисел friend_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)

Таким образом, это СДР пар друзей.

У меня такой вопрос, как лучше всего использовать friendSplit и friendPairs для поиска общих друзей между пользователями?

...