如何根据每个父亲RDD的元素

时间:2017-03-14 11:59:40

标签: scala apache-spark rdd

我想找到一种方法将fatherRDD分成多个RDD,相应于每个父RDD的元素。

例如,fatherRDD的元素有很多列表。我想根据每个元素将这个父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?

1 个答案:

答案 0 :(得分:0)

根据您的描述,它应如下所示:

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)

试试这个数据。这就是你想要的吗?