我想找到一种方法将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?
答案 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)
试试这个数据。这就是你想要的吗?