Apache spark 如何将不同长度的多个RDD组合成具有特定订单模式的单个RDD?

Apache spark 如何将不同长度的多个RDD组合成具有特定订单模式的单个RDD?,apache-spark,rdd,Apache Spark,Rdd,我有几个不同长度的RDD: RDD1 : [a, b, c, d, e, f, g] RDD2 : [1, 3 ,2, 44, 5] RDD3 : [D, F, G] 我想将它们组合成一个RDD,使用订单模式: 每5行:从RDD1中获取2行,从RDD2中获取2行,然后从RDD2中获取1行 RDD3 此模式应循环,直到所有RDD耗尽。 上述输出应为: RDDCombine : [a,b,1,3,D, c,d,2,44,F, e,f,5,G, g] 如何做到这一点?非常感谢 背景:我正在设计

我有几个不同长度的RDD:

RDD1 : [a, b, c, d, e, f, g]
RDD2 : [1, 3 ,2, 44, 5]
RDD3 : [D, F, G]
我想将它们组合成一个RDD,使用订单模式:

每5行:从RDD1中获取2行,从RDD2中获取2行,然后从RDD2中获取1行 RDD3

此模式应循环,直到所有RDD耗尽。 上述输出应为:

RDDCombine : [a,b,1,3,D,  c,d,2,44,F,  e,f,5,G, g]
如何做到这一点?非常感谢


背景:我正在设计一个推荐系统。现在我有几个来自不同算法的RDD输出,我想以某种顺序模式将它们组合起来,形成一个混合推荐

我不会说这是一个最佳解决方案,但可能会帮助您开始。。同样,这根本不是生产就绪代码。另外,基于更少的数据,我使用的分区数是1,但您可以编辑它

def main(args: Array[String]): Unit = {

    val conf = new SparkConf()
    conf.setMaster("local[*]")
    conf.setAppName("some")
    val sc = new SparkContext(conf)

    val rdd2 = sc.parallelize(Seq(1,3,2,44,5),1)
    val rdd1 = sc.parallelize(Seq('a','b','c','d','e','f','g'),1)
    val rdd3 = sc.parallelize(Seq('D','F','G'),1)

    val groupingCount = 2

    val rdd = rdd1.zipPartitions(rdd2,rdd3)((a,b,c) => {
      val ag = a.grouped(groupingCount)
      val bg = b.grouped(groupingCount)
      val cg = c.grouped(1)
      ag.zip(bg).zip(cg).map(x=> x._1._1 ++ x._1._2 ++x._2
      )
    })


    rdd.foreach(println)
    sc.stop()


  }