Spark的RDD笛卡尔运算到本地分区

时间:2016-02-23 14:19:30

标签: apache-spark rdd

我希望将cartesian本地应用于每个分区,而不是全局应用于RDD。由于一些领域知识,我可以在不相交的集合中对我的数据集进行分区。我想利用它来最小化昂贵的cartesian操作中生成的对的数量。

是否可以将RDD[T]的分区解构为一个分区的Seq[RDD[T]

1 个答案:

答案 0 :(得分:1)

您可以简单地遍历分区索引:

(0 until rdd.partitions.size).map(
  i => rdd.mapPartitionsWithIndex((j, iter) => if (i == j) iter else Iterator()))

如果您只想在每个分区上计算笛卡尔积,则可以直接进行:

rdd.mapPartitions(iter => {
  val vals = iter.toSeq
  for {
    i <- vals.toIterator
    j <- vals
  } yield (i, j)
})