Scala 对列表的相应元素应用函数

Scala 对列表的相应元素应用函数,scala,apache-spark,Scala,Apache Spark,我有两个列表,每个列表包含一个元组序列。我正在努力 对列表的共同响应元素运行函数 val l1 = List(("a" , Seq( ("link1", 2) , ("link2" , 4) ))) //> l1 : List[(String, Seq[(String, Int)])] = List((a,List((link1,2), (link2,3)

我有两个列表,每个列表包含一个元组序列。我正在努力 对列表的共同响应元素运行函数

  val l1 = List(("a" , Seq( ("link1", 2) , ("link2" , 4) )))
                                                  //> l1  : List[(String, Seq[(String, Int)])] = List((a,List((link1,2), (link2,3)
                                                  //| )))
  val l2 = List(("b" , Seq( ("link1", 2) , ("link3" , 3) , ("link2" , 3) )))
                                                  //> l2  : List[(String, Seq[(String, Int)])] = List((b,List((link1,2), (link3,3)
                                                  //| , (link2,3))))
所以我尝试将两个列表按以下格式分组,然后对相应的元素应用函数:

  l1Grouped = Seq( ("link1", 2) , ("link2" , 4)
  l2Grouped = Seq( ("link1", 2) , ("link2" , 3)
一旦元素采用上述格式,我就可以使用
zip
应用函数

“link3”不包含在两个列表中,因为它只包含在l2中

为了实现这一点,我尝试使用下面的intersect函数对项目进行分组:

 l1(0)._2.intersect(l2(0)._2)                    //> res0: Seq[(String, Int)] = List((link1,2), (link2,3))
但这只增加了一次类似的项目

如何针对上面定义的变量l1和l2的相应元素运行函数


实际上,l1和2属于spark obj RDD类型,我在本例中使用列表进行测试,但相同的解决方案应与RDD兼容。

不需要
intersect
zip

val map = l1(0)._2.toMap
for {
  (k, v1) <- l2(0)._2
  v2 <- map.get(k)
} yield ... // Return a value based on v1 and v2
val map=l1(0)。\u 2.toMap
为了{

(k,v1)都是长度为1的
l1
l2
吗?如果不是,那么如何将它们从
l1
转换为
l1Grouped
?@ggovan在上述示例中,为简单起见,它们的长度为1。实际上,它们的长度将大于1。“如何将它们从l1转换为l1Grouped?”这就是我不知道的。l1Grouped&l2Grouped它们是我试图创建的转换吗?你希望它们如何匹配?通过“link\ux\ux”?还是通过全元组的相等?因为它是
l1Grouped==l2Grouped
@ggovan为歧义道歉,我应该使用更精确的测试数据。我希望它们基于“link\ux\ux”匹配@ggovan我更新了问题,使其更加准确