如何使用groupByKey()

时间:2017-11-19 18:17:57

标签: apache-spark rdd

RDD是键值对。 groupByKey()可以创建大量的shuffle,这会损害性能。我想知道如何使用groupByKey()

减少不必要的shuffle

如果我先重新分配RDD,然后再分组,那么它会有帮助吗?

val inputRdd2 = inputRdd.partitionBy(new HashPartitioner(partitions=500) )

inputRdd2.groupByKey()

partitionBy()是否也会创建shuffle?感谢

1 个答案:

答案 0 :(得分:0)

  

如果我先重新分配RDD,然后再分组,那么它会有帮助吗?

它没有赢。 partitionBy本身就是一个随机播放,reduceByKey无论如何都不会应用地图缩减,所以整体来说它不会改变一件事。

不幸的是,一般情况下,对你来说没有好消息。如果你想要groupByKey,你必须付出代价。虽然精心设计的数据收集和摄取过程可以增加数据局部性并减少下游消费者的混乱(如Spark),但在任意输入上你无能为力。

从好的方面来看,许多groupBy个应用程序可以用不同的方式表达,特别是如果不需要精确的结果。不同类型的概率数据结构可能是最突出的例子。