我们假设我有一个RDD[U]
,它总是只包含1个分区。我的任务是填充此RDD,其中包含位于 n 个分区上的另一个RDD[T]
的内容。最终输出应为 n RDD[U]
的分区数。
我最初尝试做的是:
val newRDD = firstRDD.zip(secondRDD).map{ case(a, b) => a.insert(b)}
但是我收到了一个错误:Can't zip RDDs with unequal numbers of partitions
我可以在RDD api documentation中看到有一个名为zipPartitions()
的方法。是否有可能,如果是这样,如何使用此方法将RDD[T]
的每个分区压缩为RDD[U]
的唯一分区,并在我上面尝试时对其执行映射?
答案 0 :(得分:1)
这样的事情应该有效:
val zippedFirstRDD = firstRDD.zipWithIndex.map(_.swap)
val zippedSecondRDD = secondRDD.zipWithIndex.map(_.swap)
zippedFirstRDD.join(zippedSecondRDD)
.map{case (key, (valueU, valueT)) => {
valueU.insert(valueT)
}}