Spark对本地分区的RDD笛卡尔运算
Spark's RDD cartesian operation to local partitions
我想将 cartesian
局部应用到每个分区,而不是全局应用到 RDD。由于一些领域知识,我可以将我的数据集划分为不相交的集合。我想利用它来最小化在昂贵的 cartesian
操作中生成的对数。
是否可以将 RDD[T]
的分区解构为一个 Seq[RDD[T]
的分区?
您可以简单地遍历分区索引:
(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)
})
我想将 cartesian
局部应用到每个分区,而不是全局应用到 RDD。由于一些领域知识,我可以将我的数据集划分为不相交的集合。我想利用它来最小化在昂贵的 cartesian
操作中生成的对数。
是否可以将 RDD[T]
的分区解构为一个 Seq[RDD[T]
的分区?
您可以简单地遍历分区索引:
(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)
})