我运行下面的代码,结果是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是否始终保持列表中元素的顺序?
谢谢!
答案 0 :(得分:2)
这里有两个不同的概念。
parallelize
并应用不需要改组的转换时仍然存在的项目顺序。通常不依赖于值和操作的顺序,除非您明确强制执行(例如通过排序)或者您确切知道自己在做什么。