起因
object Spark_MakeRDD {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("List-RDD")
val sc : SparkContext = new SparkContext(sparkConf)
// 设置3个分区
val rdd = sc.makeRDD(List(1,2,3,4,5), 3)
// 保存到output文件夹中
rdd.saveAsTextFile("output")
sc.stop()
}
}
运行上述这段代码后,生成了3个文件,
文件名 | 内容 |
---|---|
part-00000 | 1 |
part-00001 | 2 3 |
part-00004 | 4 5 |
又运行了两次,结果仍是一样,说明不具有随机算法。感觉很奇怪,为何不是下面这样呢?
文件名 | 内容 |
---|---|
part-00000 | 1 2 |
part-00001 | 3 4 |
part-00004 | 5 |
流程分析
1.进入SparkContext的makeRDD方法中
/** Distribute a local Scala collection to form an RDD.
*
* 这个方法和parallelize相同
* 参数seq 是操作的集合类
* 参数numSlices 是分区数
* @return RDD representing distributed collection
*/
def makeRDD[T: ClassTag](
seq: Seq[T],
numSlices: Int = defaultParallelism): RDD[T] = withScope {
parallelize(seq, numSlices)
}
2.进入parallelize方法
def parallelize[T: ClassTag](
seq: Seq[T],
numSlices: Int = defaultParallelism): RDD[T] = withScope {
assertNotStopped()
new ParallelCollectionRDD[T](this, seq, numSlices, Map[Int, Seq[String]](