gpt4 book ai didi

sorting - Spark如何实现排序顺序?

转载 作者:行者123 更新时间:2023-12-03 07:22:18 28 4
gpt4 key购买 nike

假设我有一个字符串列表。我对它们进行过滤和排序,并将结果收集到驱动程序。然而,事物是分布式的,每个 RDD 都有它自己的原始列表的一部分。那么,Spark是如何实现最终的排序顺序,是否合并结果呢?

最佳答案

Spark 中的排序是一个需要改组的多阶段过程:

  1. 对输入 RDD 进行采样,该样本用于计算每个输出分区的边界(sample 后跟 collect)
  2. 使用 rangePartitioner 对输入 RDD 进行分区,并在第一步 (partitionBy) 中计算出边界
  3. 第二步中的每个分区均在本地排序 (mapPartitions)

收集数据后,剩下的就是遵循分区器定义的顺序。

上述步骤清楚地反射(reflect)在调试字符串中:

scala> val rdd = sc.parallelize(Seq(4, 2, 5, 3, 1))
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at ...

scala> rdd.sortBy(identity).toDebugString
res1: String =
(6) MapPartitionsRDD[10] at sortBy at <console>:24 [] // Sort partitions
| ShuffledRDD[9] at sortBy at <console>:24 [] // Shuffle
+-(8) MapPartitionsRDD[6] at sortBy at <console>:24 [] // Pre-shuffle steps
| ParallelCollectionRDD[0] at parallelize at <console>:21 [] // Parallelize

关于sorting - Spark如何实现排序顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32887595/

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