有没有什么有效的方法可以从RDD中提取前1000个项目,并将它们从RDD中删除?
目前我正在做的是:
small_array = big_sorted_rdd.take(1000)
big_sorted_rdd_without_small_array = big_sorted_rdd.subtract(
sc.parallize(small_array))发布于 2016-09-06 19:27:00
这不是一件简单的事情,因为RDD是分布式的(顾名思义),所以定义1000个第一项并不简单。
然而,除了你所建议的之外,还有其他方法可以实现你正在做的事情。
首先,您可以定义项目的排序,例如,将每个项目转换为tuple:( number,item),其中number从1到# of element。然后在RDD上使用filter来剪切前X个项目:
big_rdd.filter(_._1 > 1000)第二个想法是,我需要删除X个第一个元素的时间是对这些项执行迭代计算(我记得有一次我试图减少系统上的负载)。因此,您可以做的是将数据划分为每个块中1000个元素的部分,然后一次获取一个块并对其执行计算,使RDD如下所示:
RDD[(chunkNumber, List[elements])]然后,您将每次处理1000个元素,继续这个想法,您可以使您的数据集看起来像这样:
Array[RDD[elements]]然后每次处理1000个元素的RDD (迭代数组)
发布于 2016-09-06 20:19:02
val zippedRDD =val()
val neededRDD = rdd.filter(t => t._2 < 1000)
val unNeededRDD = rdd.filter(t => t._2 >= 1000)
https://stackoverflow.com/questions/39347293
复制相似问题