1,通过scala 集合方式parallelize生成rdd,
如, val rdd = sc.parallelize(1 to 10) 等价sc.parallelize(List(1,2,3,4,5,6))
这种方式下,如果在parallelize操作时没有指定分区数,则
rdd的分区数 = sc.defaultParallelism
可以手动指定
c.parallelize(List(1,2,3,4,5,6),4) 指定4个分片,如果list里的元素不够4个,那么会有一些分片是空的
2,通过textFile方式生成的rdd,
如, val rdd = sc.textFile(“path/file”)
有两种情况:
a,从本地文件file:///生成的rdd,操作时如果没有指定分区数,则默认分区数规则为:
(按照官网的描述,本地file的分片规则,应该按照hdfs的block大小划分,但实测的结果是固定按照32M来分片,可能是bug,不过不影响使用,因为spark能用所有hadoop接口支持的存储系统,所以spark textFile使用hadoop接口访问本地文件时和访问hdfs还是有区别的)
rdd的分区数 = max(本地file的分片数, sc.defaultMinPartitions)
b,从hdfs分布式文件系统hdfs://生成的rdd,操作时如果没有指定分区数,则默认分区数规则为:
rdd的分区数 = max(hdfs文件的block数目, sc.defaultMinPartitions)