2017-04-27 129 views
0

我需要了解Spark如何洗牌。无序洗牌是BYKEY操作中的性能开销。一般来说,对于RDD来说,如何进行混洗以及配对RDD或加入混洗将会发生。如果你可以用RDD和RDD中的例子来解释,那就太好了。火花洗牌

+1

你可以通过以下文章:https://0x0fff.com/spark-architecture-shuffle/ –

回答

0

Shuffling发生在ByKey Operations中是一个开销,它碰巧带来了一组特定的工作节点处理的密钥。

当你执行一个groupByKey()和rdd.toDebugString时,你会看到RDD的阶段,在'groupByKey'的情况下你会看到混乱的RDD。

因此,例如,假设你有3个节点:(假设数据是对RDD形式)

Node 1 -> Contains -> ("California", "San Francisco"), ("Texas", "Dallas") 

Node 2 -> Contains -> ("Utah", "Salt Lake City"), ("California", "San Jose") 

Node 3 -> Contains -> ("Texas", "Austin"), ("Utah", "St.George") 

现在,如果你执行一个RDD一个groupByKey由这个数据会带来下1所有类似钥匙节点。所以在Shuffling之后你的数据看起来就像

Node 1 -> Contains -> ("California", Iterable(("San Francisco", "SanJose")))   

Node 2 -> Contains -> ("Utah", Iterable(("Salt Lake City", "St.George"))) 

Node 3 -> Contains -> ("Texas", Iterable(("Austin"), ("Dallas")))