gpt4 book ai didi

scala - Spark中的groupByKey是否保留原始顺序?

转载 作者:行者123 更新时间:2023-12-03 14:55:31 25 4
gpt4 key购买 nike

在 Spark 中,groupByKey函数转换 (K,V)将 RDD 配对成 (K,Iterable<V>)对 RDD。

然而,这个功能稳定吗?即迭代中的顺序是否保留了原始顺序?

例如,如果我最初读取的文件格式为:

K1;V11
K2;V21
K1;V12

愿我对 K1 的迭代就像 (V12, V11) (因此 不保留 原始订单)或者只能是 (V11, V12) (因此 保留 原始顺序)?

最佳答案

不,订单不会保留。 spark-shell 中的示例:

scala> sc.parallelize(Seq(0->1, 0->2), 2).groupByKey.collect
res0: Array[(Int, Iterable[Int])] = Array((0,ArrayBuffer(2, 1)))

顺序取决于时间,因此在运行之间可能会有所不同。 (我在下一次运行时得到了相反的顺序。)

这里发生了什么? groupByKey通过使用 HashPartitioner 重新分区 RDD 来工作,以便一个键的所有值都在同一个分区中结束。然后它在每个分区上本地执行聚合。

重新分区也称为“shuffle”,因为 RDD 的行在节点之间重新分配。 shuffle 文件是从其他节点并行提取的。新分区是按照它们到达的顺序从这些部分构建的。来自最慢源的数据将位于新分区的末尾,并且位于 groupByKey 中列表的末尾.

(从worker本身拉取的数据当然是最快的。由于这里不涉及网络传输,因此这些数据是同步拉取的,因此是按顺序到达的。(至少看起来如此。)所以要复制我的实验,您需要在至少 2 个 Spark 工作人员。)

来源: http://apache-spark-user-list.1001560.n3.nabble.com/Is-shuffle-quot-stable-quot-td7628.html

关于scala - Spark中的groupByKey是否保留原始顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24206660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com