spark:mappartition(parallel)+ iterable(seq)vs while(seq)+ map(parallel)

时间:2015-05-19 10:34:46

标签: dictionary apache-spark key partition

我有以下困境

我玩RDD [(key0,data),(key1,data),(key0,data),..] 在按键

处理之前,我需要使用类似的密钥聚合所有数据

第一个想法是遍历所有不同的密钥,并且对于每个密钥,检索(过滤)使用相同密钥映射的所有数据。通过这种方式,我仍然可以对结果结构(RDD)执行并行操作,但如果有很多键(很多次迭代),效率很低。

第二个想法是使用自定义分区器(与不同的键一样多的分区)对数据进行分区。然后,执行mappartition ..但是,在每个分区中,我们只能按顺序处理数据(Iterable ..) ..如果有很多数据,效率低......

有什么想法吗?或者确实存在第三个神奇的想法? 感谢

2 个答案:

答案 0 :(得分:0)

问题缺乏确定所需的详细程度,但看起来rdd.reduceByKey(aggregation)rdd.aggregateByKey(zero)(aggregator,reducer)符合需求。

答案 1 :(得分:0)

感谢您的帮助..

因此,通过在同一个集合(Buffer,List,...)中聚合数据(按键), 我可以对它们进行回归..但是生成的集合可能太大而无法驻留在单个节点上