kick: mappartition(parallel) + iterable(seq) vs while(seq)+map(parallel)
spark: mappartition (parallel) + iterable (seq) vs while (seq) + map (parallel)
我有以下困境
我玩 RDD[(key0, data),(key1, data),(key0, data),..]
我需要先用相似的键聚合所有数据,然后再按键
处理它们
第一个想法是迭代所有不同的键,并且对于每个键,检索(过滤)使用相同键映射的所有数据。通过这种方式,我仍然可以对结果结构执行并行操作( RDD),但是如果有很多键(多次迭代)效率低下..
第二个想法是使用自定义分区器对数据进行分区(与不同的键一样多的分区)。然后,做一个 mappartition。但是,在每个分区内,我们只能顺序处理数据(Iterable。 ..).. 数据多效率低下..
有什么想法吗?或者是否存在第三个神奇的想法?
谢谢
该问题缺乏确定所需的详细程度,但看起来 rdd.reduceByKey(aggregation)
或 rdd.aggregateByKey(zero)(aggregator,reducer)
可以满足需要。
感谢您的帮助..
因此,通过在同一集合(缓冲区、列表、...)中(按键)聚合数据,
我可以对它们进行回归。但是生成的集合可能太大而无法驻留在单个节点上
我有以下困境
我玩 RDD[(key0, data),(key1, data),(key0, data),..] 我需要先用相似的键聚合所有数据,然后再按键
处理它们第一个想法是迭代所有不同的键,并且对于每个键,检索(过滤)使用相同键映射的所有数据。通过这种方式,我仍然可以对结果结构执行并行操作( RDD),但是如果有很多键(多次迭代)效率低下..
第二个想法是使用自定义分区器对数据进行分区(与不同的键一样多的分区)。然后,做一个 mappartition。但是,在每个分区内,我们只能顺序处理数据(Iterable。 ..).. 数据多效率低下..
有什么想法吗?或者是否存在第三个神奇的想法? 谢谢
该问题缺乏确定所需的详细程度,但看起来 rdd.reduceByKey(aggregation)
或 rdd.aggregateByKey(zero)(aggregator,reducer)
可以满足需要。
感谢您的帮助..
因此,通过在同一集合(缓冲区、列表、...)中(按键)聚合数据, 我可以对它们进行回归。但是生成的集合可能太大而无法驻留在单个节点上