如何根据每个父RDD的元素将RDD划分为多个RDD



我想找到一种将父亲分为多个rdd的方法,将其相应地分成每个父亲的元素。

例如,父亲的元素有很多列表。我想根据每个元素将这个父亲分成许多小型RDD。换句话说,如果父亲有n个元素,我想获得n个rdd。

两天前,我写了这样的功能:

def splitRDD(rdd1:RDD[List[(String, String)]]):List[RDD[(String, String)]] ={
   var list = List[RDD[(String, String)]] ()
   //println(rdd1.take(1).apply(0).apply(0)._1)
   rdd1.foreach(x =>{
      list = sc.makeRDD(x)::list
   }) 
   list    
}

我认为我不能在这里使用sc.makeRDD(x)。那么如何根据每个父亲RDD的元素将RDD分为多个RDD?

根据您的描述,应该像这样:

def splitRDD(rdd1:RDD[List[(String, String)]]):List[RDD[(String, String)]] =  rdd1.collect().toList.map(x => makeRdd(x))
def makeRdd(ls:List[(String,String)]): RDD[(String, String)] = sc.parallelize(ls)

尝试您的数据。那是你想要的吗?

最新更新