从S3存储桶加载文件时Spark会创建多少个分区?

时间:2016-05-11 16:44:23

标签: hadoop apache-spark amazon-s3 rdd bigdata

如果默认情况下从HDFS加载文件,spark会为每个块创建一个分区。但是,当从S3存储桶加载文件时,spark如何决定分区?

3 个答案:

答案 0 :(得分:1)

请参阅org.apache.hadoop.mapred.FileInputFormat.getSplits()的代码。

块大小取决于S3文件系统的实现(参见FileStatus.getBlockSize())。例如。 S3AFileStatus只需将其设置为0(然后FileInputFormat.computeSplitSize()即可发挥作用)。

另外,如果您的InputFormat不可分割,您就不会分裂:)

答案 1 :(得分:0)

默认情况下,从s3读取时,spark将创建大小为64MB的分区。 因此,一个100 MB的文件将分为2个分区,即64MB和36MB。大小小于或等于64 MB的对象根本不会被分割。

答案 2 :(得分:-1)

Spark会将S3视为基于块的文件系统,因此HDFS和S3输入的分区规则是相同的:默认情况下,每个块将获得一个分区。值得自己检查创建的分区数量:

val inputRDD = sc.textFile("s3a://...")
println(inputRDD.partitions.length)

为了进一步阅读,我建议this,其中详细介绍了分区规则。