首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark - Take和Subtract

Spark - Take和Subtract
EN

Stack Overflow用户
提问于 2016-09-06 18:55:13
回答 2查看 195关注 0票数 0

有没有什么有效的方法可以从RDD中提取前1000个项目,并将它们从RDD中删除?

目前我正在做的是:

代码语言:javascript
复制
small_array = big_sorted_rdd.take(1000)
big_sorted_rdd_without_small_array = big_sorted_rdd.subtract(
    sc.parallize(small_array))
EN

回答 2

Stack Overflow用户

发布于 2016-09-06 19:27:00

这不是一件简单的事情,因为RDD是分布式的(顾名思义),所以定义1000个第一项并不简单。

然而,除了你所建议的之外,还有其他方法可以实现你正在做的事情。

首先,您可以定义项目的排序,例如,将每个项目转换为tuple:( number,item),其中number从1到# of element。然后在RDD上使用filter来剪切前X个项目:

代码语言:javascript
复制
big_rdd.filter(_._1 > 1000)

第二个想法是,我需要删除X个第一个元素的时间是对这些项执行迭代计算(我记得有一次我试图减少系统上的负载)。因此,您可以做的是将数据划分为每个块中1000个元素的部分,然后一次获取一个块并对其执行计算,使RDD如下所示:

代码语言:javascript
复制
RDD[(chunkNumber, List[elements])]

然后,您将每次处理1000个元素,继续这个想法,您可以使您的数据集看起来像这样:

代码语言:javascript
复制
Array[RDD[elements]]

然后每次处理1000个元素的RDD (迭代数组)

票数 0
EN

Stack Overflow用户

发布于 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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39347293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档