spark parallelize(List(1,2,3,4),2) 总是按顺序划分列表?

spark parallelize(List(1,2,3,4),2) always partition the list in order?

我已经 运行 下面的代码,结果是 37。

val z = sc.parallelize(List(1,2,7,4,30,6), 2)
z.aggregate(0)(math.max(_, _), _ + _)
res40: Int = 37

似乎 spark 将列表划分为 2 个列表:[1,2,7] , [4,30,6].

然后我把列表中7和4的顺序改一下,得到了34

scala> val z = sc.parallelize(List(1,2,4,7,30,6), 2)
z: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[18] at parallelize at <console>:24

scala> z.aggregate(0)(math.max(_, _), _ + _)
res11: Int = 34

我想知道的是spark在分区的时候是否一直保持list中元素的顺序?

谢谢!

这里有两个不同的概念。

  • 使用 parallelize 和应用不需要洗牌的转换时坚持的项目顺序。
  • 聚合期间项目的顺序未保留且不确定。虽然每个分区都是按顺序聚合的,但合并部分结果的顺序是任意的。

通常不依赖于值和操作的顺序,除非您明确强制执行(例如通过排序)或者您确切地知道自己在做什么。