2016-12-01 88 views
1

我已經運行下面的代碼,結果是37spark並行化(List(1,2,3,4),2)總是按順序對列表進行分區?

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

似乎火花分區列表分爲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 

我想知道的是,如果火花始終保持在列表分區時,元素的順序?

謝謝!

回答

2

這裏有兩個不同的概念。項目

  • 訂購這是使用parallelize和應用不需要洗牌轉換時堅持了下來。
  • 聚合期間的項目順序未保留且不確定。雖然每個分區是按順序聚合的,但合併部分結果的順序是任意的。

一般情況下,除非您明確強制執行(例如通過排序)或者您確切知道自己在做什麼,否則不會依賴於值和操作的順序。