这可能只通过使用 map 和 join 函数来实现吗?

2024-04-25 18:07:14 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有(firstname, list of surnames)个键值对。由此,我可以轻松地创建(firstname, surname)键值对以及(surname, list of firstnames)键值对。但是,我需要(firstname, firstname)键-值对,用于具有相同姓氏的人。你知道吗

我现在解决这个问题的方法是将一个函数传递给flatMap函数,该函数将(surname, list of firstnames)作为输入,并通过遍历姓氏的名字列表返回(firstname, firstname)。但是,我注意到spark不能正确地将我的程序与此并行。我想知道这个结果是否只有通过使用mapjoin函数才可能,也就是说,不需要我们用flatMap为此编写特殊函数?你知道吗

换句话说,这是我输入的一个例子

(FirstName1, [Surname1, Surname2, Surname3]),
(FirstName2, [Surname2, Surname4]),
(FirstName3, [Surname5, Surname6]),
(FirstName4, [Surname6, Surname7]),
(FirstName5, [Surname1, Surname4])

对此,我们应该有以下输出

(FirstName1, FirstName2),  
(FirstName2, FirstName1), 
(FirstName2, FirstName5), 
(FirstName3, FirstName4), 
(FirstName4, FirstName3), 
(FirstName5, FirstName1), 
(FirstName5, FirstName2)

Tags: of函数surnamefirstnamelist键值姓氏flatmap
1条回答
网友
1楼 · 发布于 2024-04-25 18:07:14

flatMap(surname, firstname)对,然后groupByKey?你知道吗

val bySurname = myRdd.flatMap{case (firstname, surnames) => surnames map {s => (s, firstname)}}
bySurname.groupByKey.map(_._2)
//then flatMap to go from a Set of firstnames to a load of pairs of them.

相关问题 更多 >