我希望将cartesian
本地应用于每个分区,而不是全局应用于RDD。由于一些领域知识,我可以在不相交的集合中对我的数据集进行分区。我想利用它来最小化昂贵的cartesian
操作中生成的对的数量。
是否可以将RDD[T]
的分区解构为一个分区的Seq[RDD[T]
?
答案 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)
})