我想找到一种将父亲分为多个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)
尝试您的数据。那是你想要的吗?