为什么sc.parallelize(List)值在每次执行时排序不同

时间:2016-12-19 01:50:22

标签: scala apache-spark

我只是将列表值并行化为RDD并尝试在spark-shell上打印它。它每次都会在排序中打印不同的值。据我所知,这是因为RDD的性质以及它如何存储数据。 但是,我希望它能够以同样的方式进行排序,如何实现它。

scala> val num1=sc.parallelize(List(1,2,3))
num1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[5] at parallelize at <console>:24

scala> num1.foreach(println)
3
1
2

scala> num1.foreach(println)
1
2
3

scala> num1.foreach(println)
2
3
1

scala> num1.foreach(println)
2
3
1

scala> num1.foreach(println)
1
3
2

1 个答案:

答案 0 :(得分:3)

这里有两个不同的东西 - 收集顺序和副作用的顺序(println here)。收集顺序是稳定的,每次在其上调用collect时,您应该返回相同的列表。但是,如果您致电foreach,则订单无法保证,因为spark不会对任何特定功能排序提供任何保证。因此,如果您只关心收集订单,请不要担心。但是,如果你关心效果排序,你可能必须首先收集,然后在本地机器上运行所有东西 - 这有点击败了火花的整个目的。