1月16日

RDD的分区:

集合并行化的方式创建分区: [默认根据cores数自动分区,可以手动设置分区数量]

scala> val a=Array(11,22,33)
a: Array[Int] = Array(11, 22, 33)
 
scala> sc.makeRDD(a,3)
res1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at makeRDD
at <console>:27

scala> res1.partitions.size
res2: Int = 3  
//总共3个cores,所以创建了3个分区,有多少cores创建多 少个分区。Cpu有多少个cores,就证明这个集群能并行执行处理多少个任务,所以系统在创建RDD的时候做到了最大并行化。


读取外部文件的时候分区的数量是变化的。因为读取外部文件的时候分区的数量=文件的block数量[如果block的数量如果小于2,那么分区默认就是2,如果大于2那么就是具体的block的数量,有多少个block就有多少个分区,然后要给task任务处理
一个分区中的任务 ]

转换类算子产生的分区:[转换类算子产生的新的RDD,分区默认不改变]

 

RDD分区总结:

1-通过集合并行化的形式:有多少个cores就会产生多少个分区;可以手动修改;

2-通过读取HDFS文件的形式产生分区,有多少个block块就会产生多少个分区。

调用转换类算子产生的分区,转换类算子产生新的RDD默认分区数量不变

 
posted @ 2022-01-16 22:13  不咬牙  阅读(35)  评论(0)    收藏  举报