Spark-makeRDD分区源码解析

起因

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]](
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值