Apache spark 如何将不同长度的多个RDD组合成具有特定订单模式的单个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] 如何做到这一点?非常感谢 背景:我正在设计
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()
}