我需要了解Spark中是如何进行洗牌的。是否改组是BYKEY操作中的性能开销。一般来说,对于RDD,如何进行混洗并配对RDD或加入如何进行混洗。如果你能用RDD中的例子解释并配对RDD那就太棒了。
答案 0 :(得分: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")
现在,如果在包含此Data的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")))