获得条件Scala | Spark的组合

时间:2018-03-14 08:20:22

标签: scala apache-spark combinations cartesian

我有一个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)
    }

我想知道是否有更有效的方法,因为,我认为,笛卡尔会产生过多的对,这些对将在过滤器中删除,我想避免它。

提前谢谢!

0 个答案:

没有答案