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默认分区数量不变
浙公网安备 33010602011771号