Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何根据每个父RDD将RDD划分为多个RDD';s元素_Scala_Apache Spark_Rdd - Fatal编程技术网

Scala 如何根据每个父RDD将RDD划分为多个RDD';s元素

Scala 如何根据每个父RDD将RDD划分为多个RDD';s元素,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,我想找到一种方法,根据每个父RDD的元素,将父RDD划分为多个RDD 例如,fatherrd的元素有很多列表。我想根据每个元素将这个父RDD分解成许多小RDD。换句话说,如果父RDD中有n个元素,我想得到n个RDD 两天前,我写了这样一个函数: def splitRDD(rdd1:RDD[List[(String, String)]]):List[RDD[(String, String)]] ={ var list = List[RDD[(String, String)]] () /

我想找到一种方法,根据每个父RDD的元素,将父RDD划分为多个RDD

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

我认为错误在于我不能在这里使用
sc.makeRDD(x)
。那么,如何根据每个父RDD的元素将RDD划分为多个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    
}
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)

为您的数据尝试此方法。这就是您想要的吗?

您正试图通过创建多个RDD来获得的@当然,我想获得大量的RDD,这些RDD的元素是list@Suresh换句话说,如果fatherrd有n个元素(列表类型),我想得到n个元素childRDD@tttwelve在这里创建多个RDD有什么好处?请让我们知道,这样我们可以提供一个不同的方法。你能尝试一下
val list=fatherRDD.collect
然后
list.map{sc.parallelize()}
你会得到
list[RDD]
这将更好地工作,同时也会跟踪RDDshi,我还有一个问题。在rdd1.fatherRDD.collect之后,它将返回单个节点中包含驱动程序的scala数组。同时,我的数据太大,我担心单个节点会耗尽资源并崩溃。