1月17日

修改分区数量的方法: [分区的数量决定了任务并行化处理任务的程度]

1-集合并行化创建RDD的时候可以手动的设置分区数量。Eg: sc.makeRDD(a,3)

def makeRDD[T: ClassTag](
    seq: Seq[T],
    numSlices: Int = defaultParallelism): RDD[T] = withScope {
  parallelize(seq, numSlices)
 

 

2-读取外部文件的形式,使用手动修改分区数量的方式失效:可以控制,但是不能完全控制读取HDFS文件数据的分区:

scala> sc.textFile("hdfs://192.168.11.18/in/word.txt",10)
res34: org.apache.spark.rdd.RDD[String] = hdfs://192.168.11.18/in/word.txt MapPartitionsRDD[34] at textFile at <console>:25

scala> res34.partitions.size
res35: Int = 12

 

3-通过算子转换的RDD默认情况下分区数量不变,但是可以使用算子修改分区数量:

scala> sc.makeRDD(a,3)
res42: org.apache.spark.rdd.RDD[(String, Int)] = ParallelCollectionRDD[41] at makeRDD at <console>:27

scala> res42.partitions.size
res43: Int = 3

scala> res42.reduceByKey(_+_,4)
res44: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[42] at
reduceByKey at <console>:29

scala> res44.partitions.size
res45: Int = 4

 

分区总结:

备注:

1-一般情况下,不会手动设置分区数量。

2-使用3个特殊的转换类算子。

使用reduceByKey  groupByKey  distinct 一般不常用

常用的改变分区的算子有:coalesce  repartition    coalesce=合并   repartition=再分配

 

posted @ 2022-01-17 20:11  不咬牙  阅读(58)  评论(0)    收藏  举报