首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在apache-spark中处理Iterable

在apache-spark中处理Iterable
EN

Stack Overflow用户
提问于 2017-03-26 03:41:47
回答 2查看 731关注 0票数 0

假设我有一个RDDInt。在我通过某个鉴别器函数执行groupBy之后,我得到了一个RDD[(Int,IterableInt)]。

由于此Iterable可以很大,因此它应该分布在节点之间。但是没有办法像RDD那样处理它。

例如,如果我想进一步通过键与其中一个Iterable进行配对和聚合。

或者,假设我想对其中一个进行排序,并找到median

我认为在这里调用.toList或.toSeq方法是不合法的,因为常规的scala集合不是分布式的。

那么处理Iterables的正确方法是什么呢?

EN

回答 2

Stack Overflow用户

发布于 2017-03-26 05:24:39

几乎可以肯定的是,您不想做groupBy。Spark作业中最大的性能问题之一是由于糟糕的分区和数据局部性而导致的数据在集群中的打乱。如果您正在执行groupBy,那么您可能希望在该键上对数据进行分区,并使数据尽可能地彼此靠近。因此,最后,一个groupBy表明,如果可以避免,您实际上不希望将数据分散到分区之外。

但你想要的东西需要更多的分布式。您可能想要这样做:

代码语言:javascript
复制
val rdd: RDD[Int] = ...
val rdd2: RDD[(Int, Int)] = rdd.map(i => (key(i), i))
val rdd3: RDD[(Int, Int)] = rdd2.reduceByKey((accumulator, i) => myFunction(accumulator, i))
票数 1
EN

Stack Overflow用户

发布于 2017-03-26 05:05:31

您可以使用aggregateByKey或reduceByKey transformations,为了获得结果,您可以使用actions,如collect

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

https://stackoverflow.com/questions/43021104

复制
相关文章

相似问题

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