spark:如何用另一个RDD

时间:2015-07-30 17:07:43

标签: scala hadoop apache-spark

我们假设我有一个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]的唯一分区,并在我上面尝试时对其执行映射?

1 个答案:

答案 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)
  }}