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=再分配
浙公网安备 33010602011771号