我有一个RDD tagID,其中包含以下内容:
(name_1,Set_1),
...
(name_t,Set_t),
...
我想创建成对对(name_i,Set_i),(name_j,Set_j),但仅限于Set_i.intersect(Set_j).size > 0
我设法做到的唯一方法是:
val withInd = tagIds.zipWithIndex()
val tagIdsZipped = withInd.cartesian(withInd)
.filter{
case(a, b) => (a._2 < b._2 && a._1._2.intersect(b._1._2).size>0)
}
.map{
case(a, b) => (a._1, b._1)
}
我想知道是否有更有效的方法,因为,我认为,笛卡尔会产生过多的对,这些对将在过滤器中删除,我想避免它。
提前谢谢!